Laravel 如何解決大型網站時route文件過大的問題?將route文件分拆!

這篇文章我們先不討論用子域名分伺服來建立多個 Laravel 的可能

我們先不討論效率是否會加強或改善,只討論方便管理

因為網頁而言,大多數是用routes/web.php, 所以網網站變得架構很複雜很大的時候,你這個文件就可能會很長很長

最近在了解Laravel的API,被我注意到 app/Provider/RouteServiceProvider.phpapi 的那一段

        $this->routes(function () {
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });

上面的代碼給了我想到,不如試試這樣....

1.如果你的 domain.com/admin/ 很多內容,就考慮建立獨立的route文件

            Route::middleware('web')
                ->prefix('admin')
                ->namespace($this->namespace)
                ->group(base_path('routes/admin.php'));

這邊有個重點記得,即使你的admin 頁面有自己的middleware,但這邊先填上web會較好,要驗證middleware時請在下一步的routes/admin.php 中操作,詳情參考 [後記2]

2.然後下一步,去建立 routes/admin.php

比如寫入

Route::get('/home', function () {
    return 'hello admin';
});

3.然後再去瀏覽...

然後再去瀏覽器瀏覽Laravel的 /admin/home/ 就會是hello admin

後記

這樣一做,你的web.php 一定會乾淨了很多,同樣你可套用去 producttopic 任何你認為需要組在一起的內容,前題是他們都用了相關的路徑(網址目錄, prefix())

感覺上以常理而言<應該>是多少有改善到讀取速度?但實際情況我則未能測試到

但這樣做的初衷也是為了方便管理 rotue內容

後記2 - middleware 的坑

我在測試時踩了一個坑當時在RouteServiceProvider.php的文件中直接寫成了Route::middleware('admin') 我發現只要調用到這個routes/admin.php 時就直接的把的驗證失敗,我也是個新手小白,所以我懷疑這個位置的middleware 是更深入的東西?

最終我改回middleware('web'),要做 middleware('admin') 或者一整個group 做middleware驗證等等操作,通通回到routes/admin.php 執行即可