2015-10-20 17 views
0

我在A.com上部署了我的Laravel 5項目,我也想把它放在B.com/a之下。出於某種原因,我應該在路由器中處理它的/a路徑。如何配置Laravel路由器一些路由規則工作在不同的路徑?

所以在路由器我寫: Route::get('post','[email protected]'); Route::get('a/post','[email protected]'); 這不是一個好方法,因爲有冗餘,尤其是有很多其他的路由規則。

在文檔中,只有{xx}?來處理可選參數,但在我的項目中,它不是參數而不是靜態字符串。

有沒有更好的方法來組合兩條線?

+0

如果有更多路由器,它以相同的前綴開始,則可以使用路由前綴。 http://laravel.com/docs/5.1/routing#route-group-prefixes – Iamzozo

回答

1

我會在foreach循環中使用路由前綴。這可以讓您快速輕鬆地管理路線上的前綴,同時將它們全部保存在一個地方。

foreach([null, 'a'] as $prefix) { 
    Route::group(['prefix' => $prefix], function() { 
     // Your routes here 
    }); 
} 

未加前綴的路由優先,因爲在這種情況下,路由將首先生成。如有必要,您可以輕鬆地交換陣列。

如果你真的想在一個路由定義中做到這一點,你可以使用正則表達式來匹配路由。

Route::get('{route}', function() { 
    dd('Browsing ' . app('request')->path()); 

})->where('route', '(a/)?post'); 

但它顯然不是很乾淨/可讀,所以可能不推薦。

+0

謝謝,我使用foreach來包裝所有規則。這似乎沒有優雅的方式來做到這一點。 – Fancyoung

1

你可以這樣做:

RealRoutes.php:

Route::get('post','[email protected]'); 
// ... include all of your other routes here 

routes.php文件:

include('RealRoutes.php'); 
Route::group(['prefix' => 'a/'], function() { 
    include('RealRoutes.php'); 
}); 

有可能是一個更好的辦法來解決這個使用lambda函數或類似,但上述應該作爲一個快速解決方案。

+0

我有一些不同的路線組,所以使用@Ben Swinburne的答案。還是謝謝。 – Fancyoung