如何配置 Laravel 路由器一些路由规则在不同的路径上工作?
How to config Laravel Router some route rule work on different path?
我在 A.com
上部署了我的 Laravel 5 项目,我也想把它放在 B.com/a
下。由于某种原因,我应该在路由器中处理 /a
路径。
所以在路由器中我写:
Route::get('post','PostController@index');
Route::get('a/post','PostController@index');
这不是一个好方法,因为有冗余,特别是有很多其他路由规则。
在文档中,只有{xx}?
来处理可选参数,但在我的项目中,它不是参数而是静态字符串。
有没有更好的方法来合并两条线?
你可以这样做:
RealRoutes.php:
Route::get('post','PostController@index');
// ... include all of your other routes here
routes.php:
include('RealRoutes.php');
Route::group(['prefix' => 'a/'], function () {
include('RealRoutes.php');
});
使用 lambda 函数或类似函数可能有更好的方法来解决此问题,但上述方法应该可以作为快速解决方案。
我会在 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');
但它显然不是很 clean/readable 所以可能不推荐。
我在 A.com
上部署了我的 Laravel 5 项目,我也想把它放在 B.com/a
下。由于某种原因,我应该在路由器中处理 /a
路径。
所以在路由器中我写:
Route::get('post','PostController@index');
Route::get('a/post','PostController@index');
这不是一个好方法,因为有冗余,特别是有很多其他路由规则。
在文档中,只有{xx}?
来处理可选参数,但在我的项目中,它不是参数而是静态字符串。
有没有更好的方法来合并两条线?
你可以这样做:
RealRoutes.php:
Route::get('post','PostController@index');
// ... include all of your other routes here
routes.php:
include('RealRoutes.php');
Route::group(['prefix' => 'a/'], function () {
include('RealRoutes.php');
});
使用 lambda 函数或类似函数可能有更好的方法来解决此问题,但上述方法应该可以作为快速解决方案。
我会在 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');
但它显然不是很 clean/readable 所以可能不推荐。