By John Koster
Macros are a way to reduce the lines of code a developer has to write, and can be traditionally thought of as "shortcuts". Laravel generally uses macros to add, or inject, functionality into various classes at runtime. Developers familiar with C# can see the similarities between C#'s extension methods and Laravel's macros.
For example, the following C# will add a new method CountWords
to the String
class:
1namespace ExtensionExample
2{
3 public static class StringExtension
4 {
5 public static int CountWords(this String str)
6 {
7 // Implementation of CountWords in C#
8 // return word count here.
9 }
10 }
11}
Using Laravel's macros a similar end-result can be accomplished. The following example will add a countWords
method to the Str
support class:
1use Illuminate\Support\Str;
2
3Str::macro('countWords', function($value)
4{
5 return str_word_count($value);
6});
#Default Classes That Support Macros
Classes allow for macros to be created by using the "\Illuminate\Support\Traits\Macroable" trait. The following table lists all of the default framework that allow for extension via macro methods:
Class |
---|
Illuminate\Auth\RequestGuard |
Illuminate\Auth\SessionGuard |
Illuminate\Cache\Repository |
Illuminate\Console\Scheduling\Event |
Illuminate\Database\Eloquent\FactoryBuilder |
Illuminate\Database\Eloquent\Relations\Relation |
Illuminate\Database\Query\Builder |
Illuminate\Database\Schema\Blueprint |
Illuminate\Filesystem\Filesystem |
Illuminate\Foundation\Console\PresetCommand |
Illuminate\Foundation\Testing\TestResponse |
Illuminate\Http\JsonResponse |
Illuminate\Http\RedirectResponse |
Illuminate\Http\Request |
Illuminate\Http\Response |
Illuminate\Http\UploadedFile |
Illuminate\Mail\Mailer |
Illuminate\Routing\Redirector |
Illuminate\Routing\ResponseFactory |
Illuminate\Routing\Route |
Illuminate\Routing\Router |
Illuminate\Routing\UrlGenerator |
Illuminate\Support\Arr |
Illuminate\Support\Carbon |
Illuminate\Support\Collection |
Illuminate\Support\Optional |
Illuminate\Support\Str |
Illuminate\Translation\Translator |
Illuminate\Validation\Rule |
∎