为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
largeQ 2023-05-26 17:51:37
我有两种路由,管理路由和前端路由。前端路线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 开头。注意:我不能将后端路由放在前端路由之前提前致谢!
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

如果你愿意,你可以对路由参数施加约束locale

Route::pattern('locale', '^(?!(api|admin)$)(\w*)');

你可以把它放在boot你的方法中RouteServiceProvider,它现在将不允许locale路由参数匹配'api'or 'admin'


查看完整回答
反对 回复 2023-05-26
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

您可以在 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'));

}

我个人觉得这非常有用,有助于声明无干扰和合乎逻辑的路线。开放反馈。


查看完整回答
反对 回复 2023-05-26
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

简单的方法是将两个 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');

});


查看完整回答
反对 回复 2023-05-26
  • 3 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信