解决laravel 5.3路由名冲突


resolving laravel 5.3 route name conflict

我有这个应用程序在laravel 5.3在我的本地机器上使用两个controllers

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');
});

当我使用php artisan route:list 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/postsname posts.index, URI admin/postsname posts.index

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

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

是的,您可以重写您的一个资源控制器的名称!只需将另一个参数传递给resource方法,提供一个数组,其中'names'关键字作为索引,另一个数组作为值:

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