如何使用laravel在url中查看用户配置文件

时间:2015-04-23 12:11:43

标签: php .htaccess laravel

我正在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'));

    });

我无法找到任何方法来创建路由,如果我创建一个简单的路由它会扰乱我所有的其他网址,如/ logout

在头脑风暴之后,我得出的结论是我必须实施它以检查这是否有效

Route::filter('user.item', function($route, $request)
{
    if ($route->parameter('item')->user_id !== Auth::user()->id)
    {
        App::abort(404);
    }
});

正在做的是将过滤器应用于从数据库检查的路由,如果该用户名存在或不存在,如果它存在,则获取配置文件的视图并显示配置文件,否则按原样运行URL。是否可能这样&gt ;

4 个答案:

答案 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显示用户的个人资料:

<{1>}文件中的

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开头的路线。