摘要:這篇文章來自一個社區(qū)問題的思考中為什么可以直接使用原理很簡單首先你注意一下里面
這篇文章來自一個 sf 社區(qū)問題的思考
laravel web.php 中 Route 為什么可以直接使用
1 . 首先, 你注意一下 /config/app.php 里面
/* |-------------------------------------------------------------------------- | Class Aliases |-------------------------------------------------------------------------- | | This array of class aliases will be registered when this application | is started. However, feel free to register as many as you wish as | the aliases are "lazy" loaded so they don"t hinder performance. | */ "aliases" => [ "Route" => IlluminateSupportFacadesRoute::class, ];
2 . 因為有 Facades, 所以我們直接去看 IlluminateSupportFacadesRoute::class 這個類返回的內(nèi)容
* @method static IlluminateRoutingRoute get(string $uri, Closure|array|string $action) /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return "router"; }
3 . 那就簡單了, 直接去找注冊為 router 的組件
發(fā)現(xiàn)是在 Illuminate/Routing/RoutingServiceProvider.php
/** * Register the router instance. * * @return void */ protected function registerRouter() { $this->app->singleton("router", function ($app) { return new Router($app["events"], $app); }); }
4 . new Router() 看到了沒, 很顯然就會返回 Illuminate/Routing/Router.php 實例; 是不是發(fā)現(xiàn)了
/** * Register a new GET route with the router. * * @param string $uri * @param Closure|array|string|null $action * @return IlluminateRoutingRoute */ public function get($uri, $action = null) { return $this->addRoute(["GET", "HEAD"], $uri, $action); }
1) . 我確認(rèn)了 "router" 是在
Illuminate/Routing/RoutingServiceProvider.php 里面的 ,
但是為什么沒有配置在 /config/app.php 的 providers 里面呢
Illuminate/Foundation/Application.php
注意 base service providers 和 configured providers
/** * Register all of the base service providers. * * @return void */ protected function registerBaseServiceProviders() { $this->register(new EventServiceProvider($this)); $this->register(new LogServiceProvider($this)); $this->register(new RoutingServiceProvider($this)); } /** * Register all of the configured providers. * * @return void */ public function registerConfiguredProviders() { (new ProviderRepository($this, new Filesystem, $this->getCachedServicesPath())) ->load($this->config["app.providers"]); }
2) . 那我看到在 /config/app.php 注冊了一個看起來像路由相關(guān)的 AppProvidersRouteServiceProvider::class, 它是干嘛用的呢?
首先 AppProvidersRouteServiceProvider 繼承自 IlluminateFoundationSupportProvidersRouteServiceProvider; (并且調(diào)用了我們上面的 IlluminateSupportFacadesRoute, 可以使用 Route::* )
直接看看 IlluminateFoundationSupportProvidersRouteServiceProvider 你就會明白
public function boot() { $this->setRootControllerNamespace(); if ($this->app->routesAreCached()) { $this->loadCachedRoutes(); } else { $this->loadRoutes(); $this->app->booted(function () { $this->app["router"]->getRoutes()->refreshNameLookups(); $this->app["router"]->getRoutes()->refreshActionLookups(); }); } } public function register() { // 沒有在這里注冊 }
providers文檔
boot 方法是在所有服務(wù)提供者都注冊完成后調(diào)用的方法, 所以說 這是啟動后 注冊路由的 provider
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23332.html
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務(wù)器,發(fā)出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態(tài)的,并且會應(yīng)用中間件組。 關(guān)于作者 程序開發(fā)人員,不拘泥于語言與技術(shù),目前主要從事PHP和前端開發(fā),使用Laravel和VueJs,App端使用Apicloud混合式開發(fā)。合適和夠用是最完美的追求。 個人網(wǎng)站:http://www.linganm...
摘要:倉庫地址文檔地址清晰的目錄結(jié)構(gòu)只負(fù)責(zé)定義模型如模型關(guān)聯(lián)和等負(fù)責(zé)處理這個表相關(guān)的所有業(yè)務(wù)邏輯不只是注入相關(guān)的任何都可以注入代碼定位迅速只負(fù)責(zé)處理簡單的邏輯獲取轉(zhuǎn)發(fā)數(shù)據(jù)它應(yīng)該是簡潔干凈的所有的驗證類所有的模型用戶相關(guān)的所有模型目錄結(jié)構(gòu)應(yīng)與一致 laravel-repository 倉庫地址Github Repository文檔地址 清晰的目錄結(jié)構(gòu) Models只負(fù)責(zé)定義模型(如:模型關(guān)聯(lián),...
閱讀 2656·2023-04-26 00:07
閱讀 2439·2021-11-15 11:37
閱讀 650·2021-10-19 11:44
閱讀 2178·2021-09-22 15:56
閱讀 1735·2021-09-10 10:50
閱讀 1510·2021-08-18 10:21
閱讀 2578·2019-08-30 15:53
閱讀 1638·2019-08-30 11:11