laravel 通过在 '/user/{username}' 路由中获取用户信息不起作用

我是laravel的新手,我试图通过访问 'user/{username}' 的路由来获取用户信息,但遇到了一些问题;

理论上应该可以工作,这是我的路由:

Route::get('/user/{username}', function($username){
    $user = User::where('username',$username) ->first();
    if(isset($user['username'])){

        return redirect()->route('/user/'.$username, ['user' => $user]);

    }else{

        return redirect()->route('/user/'.$username, ['error' => '该用户不存在']);

    }
});

在页面中我使用了 use App\User;,所以它应该能起作用。但是,我遇到了这个错误:

NotFoundHttpException在RouteCollection.php line 161:

非常感谢您的帮助,如果您需要更多信息,请告诉我。

点赞
用户921563
用户921563

重定向需要路由名称,而不是你想要重定向到的路径。在你的代码中,为你的路由添加一个名称,就像这样:

Route::get('/user/{username}', function($username) {
    [...]
})->name('username');
// 这里我们把我们的路由称为 'username'

现在你可以像这样重定向:

// 请注意,我们使用我们刚刚给它的名称调用重定向,将用户名值向前传递
return redirect()->route('username', ['username' => $user]);

编辑:查看你的代码,我并不完全了解你想做什么。代码看起来像会创建一个重定向循环?看起来如果你找到一个用户,你会重定向回同一个路由?

2017-02-13 20:26:06
用户7297172
用户7297172

你应该使用 firstOrFail 方法。如果数据库中没有找到用户,此方法将抛出 404 错误。

使用 -> 调用用户列值。因此你的代码应该如下:

Route::get('/user/{username}', function($username){
    $user = User::where('username',$username)->firstOrFail();
    return view('viewname', ['user' => $user]);
}

不要忘记创建一个视图用于您的用户页面。您还应该创建一个控制器来处理此请求。

2017-02-13 20:30:27
用户6790638
用户6790638

尝试使用以下方法:

$user = User::where('username', '=', $user)->first();
2017-02-13 21:16:27