如何配置Laravel路由器一些路由规则工作在不同的路径?

如何配置Laravel路由器一些路由规则工作在不同的路径?

问题描述:

我在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

我会在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

你可以这样做:

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