【发布时间】:2015-03-03 16:22:42
【问题描述】:
我正在使用 Laravel 4.2。我有一个应用程序路由到错误的视图,尽管 URL 是正确的。单击按钮时,它应该路由到users.create (UsersController@create),但实际上是路由到UsersController@show。但是,解析的 URL 是正确的,并且 DOM 元素列出了正确的 URL。谁能帮帮我?
这是我的路线文件:
// Home page
Route::get('/', 'BaseController@index');
// Define User model to pass through routes
Route::model('user', 'User');
// Create custom route for editing a user
Route::get('users/edit/{user}',
array('as' => 'users.edit', 'uses' => 'UsersController@edit'));
// Create custom route for showing a user
Route::get('users/{user}',
['as' => 'users.show', 'uses' => 'UsersController@show']);
// Remaining routes
Route::resource('users', 'UsersController',
array('except' => array('edit', 'show')));
这是我的UsersController,其中包含有问题的两个功能:
class UsersController extends \BaseController {
protected $user;
public function create()
{
return View::make('users/create');
}
public function show($user)
{
return View::make('users/show', ['user' => $user]);
}}
以下是来自php artisan routes的相关结果:
GET:HEAD users/{user} users.show UsersController@show
GET:HEAD users/create users.create UsersController@create
感谢您的帮助!
编辑:
问题的答案是简单地重新排序路由,以便首先定义资源。我知道 Laravel 会抓取与 URI 匹配的第一个路由,但我仍然不明白为什么没有传递用户对象的路由会选择定义为 users/{user} 的路由。此外,我通过link_to_route() 访问路由,也就是说,通过名称。为什么 Laravel 会选择与我明确命名的路线不同的路线?
我想这些问题超出了最初问题的范围,但我非常感谢有人提供进一步的解释。问题解决了!
【问题讨论】:
标签: php laravel laravel-routing