解决laravel 5.3路由名冲突

时间:2016-11-09 21:24:33

标签: php laravel-5

我在本地计算机上使用两个controllers

的laravel 5.3中有这个应用程序
  

AdminUsersController和AgentUsersController

现在我通过以下方式设置routes

Route::group(['middleware' => 'admin'], function(){


  Route::get('/admin', function(){
    return view('admin.index');
  });


  Route::resource('admin/users', 'AdminUsersController');

  Route::resource('admin/posts', 'AdminPostsController');
});


Route::group(['middleware' => 'agent'], function(){

  Route::get('/agent', function(){
    return view('agent.index');
  });

  Route::resource('agent/posts', 'AgentPostsController');

});

当我list使用php artisan route:list进行此处的路由时,我会得到以下信息:

+--------+-----------+-------------------------+---------------+------------------------------------------------------------------------+--------------+
| Domain | Method    | URI                     | Name          | Action                                                                 | Middleware   |
+--------+-----------+-------------------------+---------------+------------------------------------------------------------------------+--------------+
|        | GET|HEAD  | /                       |               | Closure                                                                | web          |
|        | GET|HEAD  | admin                   |               | Closure                                                                | web,admin    |
|        | GET|HEAD  | admin/posts             | posts.index   | App\Http\Controllers\AdminPostsController@index                        | web,admin    |
|
|        | GET|HEAD  | agent/posts             | posts.index   | App\Http\Controllers\AgentPostsController@index                        | web,agent    |
|        | POST      | agent/posts             | posts.store   | App\Http\Controllers\AgentPostsController@store                        | web,agent    |

请注意,URI agent/posts包含name posts.index,而URI admin/posts包含name posts.index

现在我的blade template已添加route admin user,因为{{route('posts.index')}}。我得到了URI mydomain/agent/posts而不是mydomain/admin/posts。如何让route blade知道选择URIs中的哪一个。

我知道我也可以URL('/admin/posts')选择正确的,但我想知道是否可以使用route方法。

1 个答案:

答案 0 :(得分:1)

是的,您可以覆盖其中一个资源管理器的名称!只需将另一个参数传递给资源方法,提供一个带有'名称的数组'关键字作为索引,另一个数组作为值:

Route::resource('agent/posts', 'AgentPostsController', ['names' => [
    'index' => 'agent.posts.index'
]]);