Laravel的路由功能很強(qiáng)大,默認(rèn)都是定義在routes.php文件中,隨著項(xiàng)目越來(lái)越大,我們需要的定義的路由越來(lái)越多,想象一下,如果幾百上千個(gè)路由都定義在一個(gè)文件中,如何去維護(hù)?也許還有不同的人都在同一個(gè)文件定義路由,這就造成了沖突,因此我們需要分割routes.php文件,下面介紹一種很優(yōu)雅的方式。
在app/Providers/RouteServiceProvider.php的map方法中可以如下定義:
public function map(Router $router){
? ? ? ? ? $router->group(['namespace'=>$this->namespace],function($router) {
? ? ? ? ? ? ? ? ? ? ? foreach(glob(app_path('Http//Routes') .'/*.php') as $file) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $this->app->make('App\\Http\\Routes\\'. basename($file,'.php'))->map($router);
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? });
}
文件組織結(jié)構(gòu)圖如下:
這樣它會(huì)遍歷app/Http/Routes/文件夾下的文件,遍歷每個(gè)文件路由類(lèi)的map方法,每個(gè)文件的結(jié)構(gòu)都類(lèi)似,如下:
把路由規(guī)則都寫(xiě)到每個(gè)文件的map方法中,這樣一來(lái),就實(shí)現(xiàn)了很好的routes.php文件的分開(kāi)管理。此外,你也可以簡(jiǎn)單的分割,直接把routes.php中的定義拆散成多個(gè)文件,通過(guò) require 的方式引入,但是哪個(gè)更好,一目了然。
那么這樣路由分開(kāi)多個(gè)文件后豈不是增加調(diào)用次數(shù),會(huì)不會(huì)影響性能?答案是不必?fù)?dān)心。通過(guò) Laravel 的命令:
php artisan route:cache
生成路由緩存文件后,路由只會(huì)讀取緩存文件的路由規(guī)則,因此不會(huì)影響性能,這樣做讓開(kāi)發(fā)更高效和規(guī)范。