站長資訊網
        最全最豐富的資訊網站

        Laravel 宏指令(Macro)

        下面由Laravel開發入門教程欄目給大家介紹神奇的 Laravel 宏指令(Macro),希望對需要的朋友有所幫助!

        Laravel 宏指令(Macro)

        可曾有過想要的一項功能在 Laravel 中,但它又不是真實存在的?讓我來給你介紹一下 Laravel 宏指令。宏指令允許你添加自定義功能到 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 'IlluminateHttpRequest' // instead of 'AppAppServiceProvider'

        讓我們看一個更高級的示例。此宏有條件地基于當前 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 上應用

        我們應該在哪里定義它們?

        服務提供者為為您的應用程序定義宏的好地方。AppProvidersAppServiceProvider boot() I 一個很好的注入點,但是它很快就變得臃腫。

        下一步是創建一個 AppProvidersMacrosServiceProvider 并注冊在 config/app.php 里。 如果某宏與之相關,我可能會創建一個 AppProvidersTldAwareServiceProvider 來容納所有與 TLD 相關的宏。

        哪些組件是 Macroable?

        宏可以再任何具有 Macroable 特性的類上定義。下面是一個 Macroable 的門面和類的列表

        門面

        ● Cache

        ● File

        ● Lang

        ● Request

        ● Response

        ● Route

        ● URL

        Illuminate Classes

        ● IlluminateCacheRepository

        ● IlluminateConsoleSchedulingEvent

        ● IlluminateDatabaseEloquentBuilder

        ● IlluminateDatabaseEloquentRelation

        ● IlluminateDatabaseQueryBuilder

        ● IlluminateFilesystemFilesystem

        ● IlluminateFoundationTestingTestResponse

        ● IlluminateHttpRedirectResponse

        ● IlluminateHttpRequest

        ● IlluminateHttpUploadedFile

        ● IlluminateRoutingResponseFactory

        ● IlluminateRoutingRouter

        ● IlluminateRoutingUrlGenerator

        ● IlluminateSupportArr

        ● IlluminateSupportCollection

        ● IlluminateSupportStr

        ● IlluminateTranslationTranslator

        ● IlluminateValidationRule

        動手

        如果您發現自己在整個系統中對 Laravel 組件重復執行邏輯,請考慮使用宏以實現更好的表達和重用。相信我,非常饞。

        祝您好運!

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 精品国产乱码久久久久久浪潮 | 亚洲综合精品香蕉久久网| 国产精品亲子乱子伦xxxx裸| 国产成人精品午夜福麻豆| 98视频精品全部国产| 一本色道久久88精品综合| 国内精品久久久久久中文字幕| 国产精品久久久久久福利漫画| 亚洲精品无码午夜福利中文字幕 | 久久精品国产亚洲5555| 久久97精品久久久久久久不卡| 人妻精品久久久久中文字幕69 | 国产在线观看高清精品| 久久91精品国产91久久麻豆| 国产精品熟女高潮视频| 日韩av无码久久精品免费| 在线精品自拍无码| 亚洲国产精品一区二区九九 | 最新国产精品拍自在线观看| 精品久人妻去按摩店被黑人按中出| 中文字幕精品视频| 麻豆精品久久久一区二区| 精品视频在线v| 免费91麻豆精品国产自产在线观看| 成人区人妻精品一区二区不卡视频| 久久国产精品77777| 久久久久99精品成人片直播| 日韩av无码久久精品免费| 精品欧洲av无码一区二区| 精品一区二区三区无码免费视频 | 中文字幕精品一区二区日本| 999久久久国产精品| 国产91精品黄网在线观看| 99久久精品免费国产大片| 91精品成人免费国产片| 成人亚洲日韩精品免费视频| 国产成人精品一区二区三区| 国产欧美日韩精品专区| 精品无码人妻一区二区三区不卡| 免费精品久久久久久中文字幕| 亚洲精品无码久久久|