这篇文章给大家分享的是有关Laravel宏指令Macro的用法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
宏指令允许你添加自定义功能到 Laravel 的内部组件里去。
让我们以一个简单的 Request 门面方法为例。
Request::macro('introduce', function ($name) { echo 'Hello ' . $name . '!'; }); Request::introduce('Caleb'); // outputs "Hello Caleb!"
一个更加实用的 Request 宏指令是用于检测当前的 TLD(顶级域:.com,.net,.org,.etc…)。
Request::macro('tldIs', function ($tld) { return Str::is('*.' . $tld, $this->root()); }); Request::tldIs('com') // returns true for app.com Request::tldIs('dev') // returns false for app.com
你会注意到 Laravel 自动绑定 $this 到 Request 的上线文中,而不是在一个已经定义宏的类里。比如:
class AppServiceProvider { public function boot() { Request::macro('context', function () { return get_class($this); } } ... Request::context(); // returns 'Illuminate\Http\Request' // instead of 'App\AppServiceProvider'
让我们看一个更高级的示例。此宏有条件地基于当前 TLD 在模型上添加一个 where 语句。
Builder::macro('whenTldMatches', function($tld, $callback) { if (Request::tldIs($tld)) { call_user_func($callback->bindTo($this)); } return $this; }); SomeModel::whenTldMatches('org', function () { $this->where('id', '>', 5); })->get(); // applies ->where() 在 app.org 上应用,而不在 app.com 上应用
我们应该在哪里定义它们?
服务提供者为为您的应用程序定义宏的好地方。App\Providers\AppServiceProvider boot()
是 I
一个很好的注入点,但是它很快就变得臃肿。
下一步是创建一个 App\Providers\MacrosServiceProvider
并注册在 config/app.php
里。 如果某宏与之相关,我可能会创建一个 App\Providers\TldAwareServiceProvider
来容纳所有与 TLD
相关的宏。
哪些组件是 Macroable?
宏可以再任何具有 Macroable 特性的类上定义。下面是一个 Macroable 的门面和类的列表
门面
● Cache
● File
● Lang
● Request
● Response
● Route
● URL
Illuminate Classes
● Illuminate\Cache\Repository
● Illuminate\Console\Scheduling\Event
● Illuminate\Database\Eloquent\Builder
● Illuminate\Database\Eloquent\Relation
● Illuminate\Database\Query\Builder
● Illuminate\Filesystem\Filesystem
● Illuminate\Foundation\Testing\TestResponse
● Illuminate\Http\RedirectResponse
● Illuminate\Http\Request
● Illuminate\Http\UploadedFile
● Illuminate\Routing\ResponseFactory
● Illuminate\Routing\Router
● Illuminate\Routing\UrlGenerator
● Illuminate\Support\Arr
● Illuminate\Support\Collection
● Illuminate\Support\Str
● Illuminate\Translation\Translator
● Illuminate\Validation\Rule
感谢各位的阅读!关于“Laravel宏指令Macro的用法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。