我正在使用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选择了与我明确命名的路线不同的路线?
我认为这些问题超出了最初问题的范围,但我非常感谢某人的进一步解释。问题解决了!
答案 0 :(得分:2)
对我而言,第一件事就是没有#34;创建"的路线。有一个" restful"控制器,但也许你只想尝试将路线放入。我在服务html时使用宁静的路线有点不舒服。在我正在努力保留那些数据/ json传输的项目中,为了支持外部api操作。
答案 1 :(得分:1)
我认为您的路线设置会在create
中将{user}
识别为user/{user}
,因此会重定向到user/show/create
作为“显示用户的自定义路线”设置。
您可能必须避免在users/
路由后立即获取字符串变量。