我正在设置一个哨兵laravel 4。
此时对于个人资料视图我应该像这样链接
http://localhost/ffdd/public/3/show
其中3是用户ID
我正在使用以下路线
Route::get('/{profile}/show', array('as' => 'profile.show', 'uses' => 'ProfilesController@show'));
我需要相同的链接结果
http://localhost/ffdd/public/3
我应该在路线上改变什么。
以及将来我希望此用户ID位置为用户名。
编辑2
我目前的路线结构是这样的。
Route::get('/{userId?}', array('as' => 'profile', 'uses' => 'ProfilesController@index'));
Route::post('/{userId?}', array('as' => 'profile-koko', 'uses' => 'Controllers\Account\ProfileController@postIndex'));
Route::get('/{profile}/show', array('as' => 'profile.show', 'uses' => 'ProfilesController@show'));
当profilesController的索引收到路由请求时,只需将其转发给show method。
// User is logged in
$user = Sentry::getUser();
$user = $user->id;
//return View::make('profiles.index');
return Redirect::action('ProfilesController@show', array('userId'=>$user));
}
当我使用此
时Route::get('{profile}',array(
'as' => 'test2',
'uses' => 'ProfilesController@show',
));
正如我的朋友itachi在回答中所说的那样!
我收到此错误!
Some mandatory parameters are missing ("profile") to generate a URL for route "profile.show".
编辑3
<?php
# Profile
Route::get('/{userId?}', array('as' => 'profile', 'uses' => 'ProfilesController@index'));
Route::post('/{userId?}', array('as' => 'profile-koko', 'uses' => 'Controllers\Account\ProfileController@postIndex'));
Route::resource('profile', 'ProfilesController@show');
Route::get('{profile}/show',array(
'as' => 'profile.show',
'uses' => 'ProfilesController@show',
));
Route::get('{profile}',array(
'as' => 'test2',
'uses' => 'ProfilesController@show',
));
答案 0 :(得分:2)
我没有看到为同一行动定义两条路线的任何用途。但是,如果你想要它,它就在这里。
只需创建指向同一操作的两条路线。例如
Route::get('{profile}/show',array(
'as' => 'test1',
'uses' => 'ProfileController@show',
));
Route::get('{profile}',array(
'as' => 'test2',
'uses' => 'ProfileController@show',
));
现在,您可以访问路线http://localhost/ffdd/public/3/show
和http://localhost/ffdd/public/3
但这里有一个问题。 {profile}
参数可以匹配任何内容。
e.g。
http:// localhost / ffdd / public / 3 / show [会按预期调用ProfileController @ show]
http:// localhost / ffdd / public / asdf / show [也会调用ProfileController @ show 这是不可能的!]
为了避免这个问题,你有两种方法。
在文件的最后声明这两条路由,以便其他路由优先。
由于{profile}
必须是[现在]的ID,所以让我们通过声明以下内容来约束它,
Route::pattern('profile', '[0-9]+');
现在,{profile}
只会匹配数字。
所以整个代码变为
Route::pattern('profile', '[0-9]+');
Route::get('{profile}/show',array(
'as' => 'test1',
'uses' => 'ProfileController@show',
));
Route::get('{profile}',array(
'as' => 'test2',
'uses' => 'ProfileController@show',
));
此处不存在任何冲突,因为{profile}
必须是数字才能唤起ProfileController@show
操作。
放置约束的替代方法:
还有一种使用where
放置约束的替代方法。
e.g。
Route::get('{profile}/show',array(
'as' => 'test1',
'uses' => 'ProfileController@show',
))->where('profile', '[0-9]+');
但是如果你这样做,你需要将where
放在你使用的每个路由{profile}
中。