[英]Load backend and frontend routes separately without interfering
我有两种路由,管理路由和前端路由。
前端路线
Route::get('{locale?}/', ['uses' => '\App\Http\Controllers\loadViewController@home']);
Route::get('{locale?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@index']);
Route::get('{locale?}/{template?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@detail']);
后端路由
Route::prefix('admin/dashboard')->group(function () {
Route::get('/', 'DashboardController@index')->name('dashboard');
});
现在,当我输入 admin/dashboard 或 api/admin 时,laravel 使用前端路由加载视图,而我希望加载后端视图。
所以为了过滤掉后端路由,我尝试了这个
Route::group(['where' => ['page' => '^(?!admin|api)$', 'template' => '^(?!admin|api)$']], function ({
Route::get('{locale?}/', ['uses' => '\App\Http\Controllers\loadViewController@home']);
Route::get('{locale?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@index']);
Route::get('{locale?}/{template?}/{page}', ['uses' => '\App\Http\Controllers\loadViewController@detail']);
});
这显然不起作用
前端路由也不应该有/website之类的东西,它们都应该以/开头
我的问题是:如何在调用时分别加载后端和前端路由而不干扰,即使它们在参数方面具有相同的 url 长度,请记住管理路由始终以 /admin 或 /api 开头。
注意:我不能将后端路由放在前端路由之前
提前致谢!
如果您愿意,可以对locale
路由参数进行约束:
Route::pattern('locale', '^(?!(api|admin)$)(\w*)');
您可以将它放在RouteServiceProvider
的boot
方法中,它现在将不允许locale
路由参数匹配'api'
或'admin'
。
您可以在 RouteServiceProvider 中注册单独的路由。 以下是您如何做到这一点。
在 RouteServiceProvider.php 里面做:
public function map()
{
$this->mapFrontendRoutes();
$this->mapAdminRoutes();
}
mapFrontendRoutes() 的定义:
protected function mapFrontendRoutes()
{
Route::prefix('{locales?}')
->middleware('frontend')
->namespace($this->namespace.'\Frontend')
->group(base_path('routes/frontend.php'));
}
mapAdminRoutes() 的定义:
protected function mapAdminRoutes()
{
Route::prefix('admin')
->middleware('admin')
->namespace($this->namespace.'\Admin')
->group(base_path('routes/admin.php'));
}
我个人觉得这非常有用,有助于声明无干扰和逻辑路由。 接受反馈。
简单的方法是将两个 url 分组为单独的组。 示例如下:
Route::group(['prefix' => 'admin', 'as' => 'admin'], function () {
Route::post('/dashboard', 'AdminController@dashboard');
});
Route::group(['prefix' => 'home', 'as' => 'home'], function () {
Route::get('/record/{id}', 'HomeController@getRecord');
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.