這篇文章給大家分享的是有關(guān)Laravel宏指令Macro的用法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
在故城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,故城網(wǎng)站建設(shè)費(fèi)用合理。
宏指令允許你添加自定義功能到 Laravel 的內(nèi)部組件里去。
讓我們以一個(gè)簡(jiǎn)單的 Request 門面方法為例。
Request::macro('introduce', function ($name) { echo 'Hello ' . $name . '!'; }); Request::introduce('Caleb'); // outputs "Hello Caleb!"
一個(gè)更加實(shí)用的 Request 宏指令是用于檢測(cè)當(dāng)前的 TLD(頂級(jí)域:.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
你會(huì)注意到 Laravel 自動(dòng)綁定 $this 到 Request 的上線文中,而不是在一個(gè)已經(jīng)定義宏的類里。比如:
class AppServiceProvider { public function boot() { Request::macro('context', function () { return get_class($this); } } ... Request::context(); // returns 'Illuminate\Http\Request' // instead of 'App\AppServiceProvider'
讓我們看一個(gè)更高級(jí)的示例。此宏有條件地基于當(dāng)前 TLD 在模型上添加一個(gè) where 語(yǔ)句。
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 上應(yīng)用,而不在 app.com 上應(yīng)用
我們應(yīng)該在哪里定義它們?
服務(wù)提供者為為您的應(yīng)用程序定義宏的好地方。App\Providers\AppServiceProvider boot()
是 I
一個(gè)很好的注入點(diǎn),但是它很快就變得臃腫。
下一步是創(chuàng)建一個(gè) App\Providers\MacrosServiceProvider
并注冊(cè)在 config/app.php
里。 如果某宏與之相關(guān),我可能會(huì)創(chuàng)建一個(gè) App\Providers\TldAwareServiceProvider
來(lái)容納所有與 TLD
相關(guān)的宏。
哪些組件是 Macroable?
宏可以再任何具有 Macroable 特性的類上定義。下面是一個(gè) 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
感謝各位的閱讀!關(guān)于“Laravel宏指令Macro的用法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!