在Laravel 4.0中,我的路线文件如下所示:
Route::group(['prefix' => 'v1'], function(){
// define the user resource with no system
Route::resource('users', 'UserController');
Route::get('me', function () {
$r = URL::action('UserController@show', [Auth::user()->getAuthIdentifier()]);
return Redirect::to($r);
});
Route::group(['prefix' => 'systems/{systems}'], function(){
// define the user resource with a system system
Route::resource('users', 'UserController');
});
});
哪个效果很好,
因为我只将一个参数传递给/ me路由中的URL::action
方法参数数组,所以它将使用无系统的Route :: resource('users ...`,如果我要传入两个,那么它会使用系统前缀版本。
但是在Laravel 4.1中,它正在返回路线
/v1/systems/[the user id]/users/{users}
(字面占位符{users})。
导致此更改的原因/我该如何解决?
两个路由集都被注册为php artisan routes
的输出:
GET v1/users | v1.users.index | UserController@index
GET v1/users/create | v1.users.create | UserController@create
POST v1/users | v1.users.store | UserController@store
GET v1/users/{users} | v1.users.show | UserController@show
GET v1/users/{users}/edit | v1.users.edit | UserController@edit
PUT v1/users/{users} | v1.users.update | UserController@update
PATCH v1/users/{users} | | UserController@update
GET v1/systems/{systems}/users | v1.systems.{systems}.users.index | UserController@index
POST v1/systems/{systems}/users | v1.systems.{systems}.users.store | UserController@store
GET v1/systems/{systems}/users/{users} | v1.systems.{systems}.users.show | UserController@show
PUT v1/systems/{systems}/users/{users} | v1.systems.{systems}.users.update | UserController@update
PATCH v1/systems/{systems}/users/{users} | | UserController@update
DELETE v1/systems/{systems}/users/{users} | v1.systems.{systems}.users.destroy | UserController@destroy
答案 0 :(得分:0)
您有两条指向同一操作的路线:
v1.users.index
和
v1.systems.{systems}.users.index
(看一下php artisan routes
命令输出)
当调用URL::action
函数时,Laravel会尝试通过查找actionMap
数组来查找路径名称,然后使用此名称生成链接。
actionMap
数组映射action
到name
。
所以,会发生的是后一个路由定义在actionMap
数组中使用。
使用URL::route
或route
辅助函数生成指向路径的链接,并使用密钥传递路径参数,如下所示:
['systems' => 'someSystem', 'users' => Auth::user()->getAuthIdentifier() ]