Laravel 5.1用户配置文件链接


Laravel 5.1 user profile link

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]的查询结果。

这就是问题所在?谢谢你的回答!

这里的问题是,您的控制器正试图使用{id}查找用户,而路由正试图使用{username}查找他们。

解决方案1:在控制器中的显示方法中,尝试通过用户名找到用户,并对代码进行一些调整,类似于以下内容:

   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( );
        }
    );
}

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

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

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

如果绑定,则不必手动执行findOrFail()或where用户名()。

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