您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。