我正在Laravel创建一个项目。我想创建一个网址 像http://www.mywebsite.com/username 所以我可以根据用户名
显示用户个人资料到目前为止我有这段代码
Route::group(array('prefix' => 'user', 'before' => 'admin'), function() {
# USer / Individual
Route::get('/', array('as' => 'user', 'uses' => 'Admin\AdminIndividualController@getindex'));
Route::get('create-user', array('as' => 'create-user', 'uses' => 'Admin\AdminIndividualController@create'));
Route::get('edit-user/{id}', array('as' => 'edit-user', 'uses' => 'Admin\AdminIndividualController@edit'))->where(array('id' => '[0-9]+'));
Route::get('delete-user/{id}', array('as' => 'del_user', 'uses' => 'Admin\AdminIndividualController@destroy'))->where(array('id' => '[0-9]+'));
Route::get('deactivate/{id}', array('as' => 'user_deactive', 'uses' => 'Admin\AdminIndividualController@deactive_user'))->where(array('id' => '[0-9]+'));
Route::get('active/{id}', array('as' => 'user_active', 'uses' => 'Admin\AdminIndividualController@active_user'))->where(array('id' => '[0-9]+'));
Route::post('create-user', array('as' => 'post-user', 'uses' => 'Admin\AdminIndividualController@store'));
Route::post('update-user/{id}', array('as' => 'update-user', 'uses' => 'Admin\AdminIndividualController@update'))->where(array('id' => '[0-9]+'));
# USer [Individual] Skills
Route::get('create-skill', array('as' => 'create-user-skill', 'uses' => 'Admin\AdminIndividualController@create_skill'));
Route::get('delete-skill/{id}', array('as' => 'del_skill', 'uses' => 'Admin\AdminIndividualController@destroy_skill'))->where(array('id' => '[0-9]+'));
Route::post('create-skill', array('as' => 'create-user-skill', 'uses' => 'Admin\AdminIndividualController@store_skill'));
#send email to user
Route::get('send-email/{id}', array('as' => 'create-email-user', 'uses' => 'Admin\AdminIndividualController@create_email'))->where(array('id' => '[0-9]+'));
Route::post('send-email', array('as' => 'send-email-user', 'uses' => 'Admin\AdminIndividualController@send_email'));
});
在头脑风暴之后,我得出的结论是我必须实施它以检查这是否有效
Route::filter('user.item', function($route, $request)
{
if ($route->parameter('item')->user_id !== Auth::user()->id)
{
App::abort(404);
}
});
正在做的是将过滤器应用于从数据库检查的路由,如果该用户名存在或不存在,如果它存在,则获取配置文件的视图并显示配置文件,否则按原样运行URL。是否可能这样&gt ;
答案 0 :(得分:2)
首先包含动态细分的路线应该在所有其他路线之后,因此只有在其他路线不匹配时才会运行...
Route::get('foo', ...);
Route::get('bar', ...);
Route::get('{user}', ...);
请注意,仍然存在问题,因为用户无法使用create-user
这个名称,因为否则他不会看到他的个人资料,而是看到实际的create-user
路线。
这意味着如果您真的想拥有这样的个人资料网址,您应该验证用户名并检查保留字(实际上是您的其他路线)
当然,另一种方法是使用user/{username}
答案 1 :(得分:0)
你是对的,这样的路由将超载所有其他路由,没有任何作用。
创建类似http://www.mywebsite.com/u/username
的网址要容易得多如果您想拥有route / {username},那么您可以将所有其他网址设为2个或更多网址段,或者在路由中制作无效的手动魔术。
在手动路由中,您可以查看用户名是否与任何用户匹配,如果没有,则执行注销。您还需要记住某些用户名可以注销。
答案 2 :(得分:0)
将您的用户名“密钥”绑定(在您的路线中)并创建路线绑定。
Route::bind('username',function($value){
return User::where('username',$value)->first();
});
Route::group(array('prefix' => '{username}', 'before' => 'admin'), function() {
# USer / Individual
Route::get('/', array('as' => 'user', 'uses' => 'Admin\AdminIndividualController@getindex'));
Route::get('create-user', array('as' => 'create-user', 'uses' => 'Admin\AdminIndividualController@create'));
Route::get('edit-user/{id}', array('as' => 'edit-user', 'uses' => 'Admin\AdminIndividualController@edit'))->where(array('id' => '[0-9]+'));
Route::get('delete-user/{id}', array('as' => 'del_user', 'uses' => 'Admin\AdminIndividualController@destroy'))->where(array('id' => '[0-9]+'));
Route::get('deactivate/{id}', array('as' => 'user_deactive', 'uses' => 'Admin\AdminIndividualController@deactive_user'))->where(array('id' => '[0-9]+'));
Route::get('active/{id}', array('as' => 'user_active', 'uses' => 'Admin\AdminIndividualController@active_user'))->where(array('id' => '[0-9]+'));
Route::post('create-user', array('as' => 'post-user', 'uses' => 'Admin\AdminIndividualController@store'));
Route::post('update-user/{id}', array('as' => 'update-user', 'uses' => 'Admin\AdminIndividualController@update'))->where(array('id' => '[0-9]+'));
# USer [Individual] Skills
Route::get('create-skill', array('as' => 'create-user-skill', 'uses' => 'Admin\AdminIndividualController@create_skill'));
Route::get('delete-skill/{id}', array('as' => 'del_skill', 'uses' => 'Admin\AdminIndividualController@destroy_skill'))->where(array('id' => '[0-9]+'));
Route::post('create-skill', array('as' => 'create-user-skill', 'uses' => 'Admin\AdminIndividualController@store_skill'));
#send email to user
Route::get('send-email/{id}', array('as' => 'create-email-user', 'uses' => 'Admin\AdminIndividualController@create_email'))->where(array('id' => '[0-9]+'));
Route::post('send-email', array('as' => 'send-email-user', 'uses' => 'Admin\AdminIndividualController@send_email'));
});
答案 3 :(得分:0)
如果您可以显示用户个人资料页面的网址,如下所示:http://website.com/@username
那么您可以根据他的username
显示用户的个人资料:
routes.php
<{1>}文件中的
Route::get("@{username}", array(
"as" => "users.show",
"uses" => "UsersController@show",
));
您可以像这样创建指向该网址UsersController.php
的链接:
public function show($username)
{
$user = User::where("username", "=", $username)->first();
if (is_null($user))
{
return App::abort(404);
}
return View::make("path/to/view/file")->with("user", $user);
}
这样您就不需要检查保留字(这是您的其他路线),除非您已经有一个以符号http://website.com/@username
开头的路线。