2017-08-01 157 views
3

我目前正在開發一個多站點應用程序(多個(子)站點的一個代碼庫),我很想利用路由緩存,但目前我硬編碼前綴而不是動態編碼確定它。Laravel:可選路由前綴參數

當試圖做到這一點我運行到我請參考以下說明一個問題:

Route::group(['prefix' => '{subsite}', 'subdomain' => '{site}.domain.tld'], function() { 
    Route::get('blog', '[email protected]')->name('blog.index'); 
}); 

當訪問像http://sitename.domain.tld/subsitename/blog子網站所有這一切工作正常,但它不工作了,當不訪問像http://sitename.domain.tld/blog這樣的子網站,因爲它現在會認爲前綴是'blog'。

有什麼辦法可以讓'subsite'參數爲空或跳過嗎?

謝謝!

+0

Laravel確實有可選的參數,但這些只能作爲該列表中的最後一個參數,我想你最好的選擇是包裝的所有路由這就需要有可選的子網站的功能和創建2個組,一個與子網站和一個沒有 – milo526

回答

2

據我所知,目前的路由系統中沒有任何東西可以讓你用一個路由組解決你的問題。

雖然這不能解答您的具體問題,但我可以想出兩種方法可以實現您的預​​期行爲。

1.複製路線組

Route::group(['subdomain' => '{site}.domain.tld'], function() { 
    Route::get('blog', '[email protected]')->name('blog.index'); 
}); 

Route::group(['prefix' => '{subsite}', 'subdomain' => '{site}.domain.tld'], function() { 
    Route::get('blog', '[email protected]')->name('blog.index'); 
}); 

2.循環通過預期前綴的陣列。

$prefixes = ['', 'subsiteone', 'subsitetwo']; 

foreach($prefixes as $prefix) { 
    Route::group(['prefix' => $prefix, 'subdomain' => '{site}.domain.tld'], function() { 
     Route::get('blog', '[email protected]')->name('blog.index'); 
    }); 
} 
+1

感謝您的迴應,Jeemusu!這些方法的問題是,命名的路由會互相覆蓋,因此轉到'route('blog.index')'將始終鏈接到最後定義的路由。不幸的是,第二種方法不適用於路由緩存:( – Stidges

+0

啊,我的錯!這個名字需要改爲每個前綴都是唯一的。 – Jeemusu