Laravel 5.1用户个人资料链接

时间:2015-11-21 11:43:25

标签: php mysql laravel

Okey,所以我创建了一个指向用户个人资料的链接。我的控制器看起来像这样:

    public function show($id)
{
    $user = User::whereId($id)->User::whereUsername($username)->whereActivated(true)->first();

    $user->access_counter++;
    $user->save();

    $this->title($user->username);
    $this->pageView('users::show', compact('user'));
}

我的路线文件如下:

ModuleRoute::get('users/{username}', 'UsersController@show');

然后我去地址:default.com/users/test,我收到错误:没有模型[Models \ User]的查询结果。

这个问题?谢谢你的回答!

1 个答案:

答案 0 :(得分:0)

问题在于您的控制器正在尝试使用{id}查找用户,并且路由正在尝试使用{username}查找用户。

解决方案1: 在控制器的show方法中,尝试按用户名查找用户并稍微调整一下代码,如下所示:

   public function show($username)
{
    $user = User::whereUsername($username)->whereActivated(true)->first();

    $user->access_counter++;
    $user->save();

    $this->title($user->username);
    $this->pageView('users::show', compact('user'));
}

解决方案2:

您可以更改您的app / Providers / RouteServiceProvider.php的启动方法:

public function boot( Router $router )
{
    parent::boot( $router );

    $router->bind( 'username',
        function ( $username )
        {
            return \App\User::where( 'username', $username )->firstOrFail( );
        }
    );
}

然后你可以在控制器的show方法中键入提示用户模型作为参数

public function show( App\User $user )
{
    return view('users.show', compact('user'));
}

Laravel将在您指定{username}占位符的任何路径中自动为用户模型绑定给定的用户名,并在控制器的方法中键入提示。

如果你绑定,那么你不必手动执行findOrFail()或whereUsername()。

如果您遇到未提交更改的问题,请尝试执行以下操作: php artisan route:cache& php artisan optimize --force