laravel 4.1路由的变化?

时间:2014-01-09 01:56:12

标签: php routing laravel laravel-4

在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

1 个答案:

答案 0 :(得分:0)

您有两条指向同一操作的路线:

v1.users.index

v1.systems.{systems}.users.index

(看一下php artisan routes命令输出)

当调用URL::action函数时,Laravel会尝试通过查找actionMap数组来查找路径名称,然后使用此名称生成链接。

所有路线的

actionMap数组映射actionname

所以,会发生的是后一个路由定义在actionMap数组中使用。

使用URL::routeroute辅助函数生成指向路径的链接,并使用密钥传递路径参数,如下所示:

['systems' => 'someSystem', 'users' => Auth::user()->getAuthIdentifier() ]


Laravel Named Routes

Laravel URLs