猿问

后端和前端路由分开加载,互不干扰

我有两种路由,管理路由和前端路由。


前端路线


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 开头。


注意:我不能将后端路由放在前端路由之前


提前致谢!


largeQ
浏览 185回答 3
3回答

守着星空守着你

如果你愿意,你可以对路由参数施加约束locale:Route::pattern('locale', '^(?!(api|admin)$)(\w*)');你可以把它放在boot你的方法中RouteServiceProvider,它现在将不允许locale路由参数匹配'api'or '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');});
随时随地看视频慕课网APP
我要回答