Laravel 验证方法失败后如何重定向
How to redirect after validate method fails in Laravel
我正在使用 Laravel 6,我创建了一个表单来将新用户插入到我的数据库中。如果验证器失败,我想更改重定向方法的路由。我尝试了很多次,但总是在验证器失败时,我在当前视图 (adminArea.blade.php) 而不是主视图 (home.blade.php) 中看到错误。
public function insert_user(Request $request)
{
$this->validate($request, [
'name' => 'required',
'surname' => 'required',
'email' => 'required|email|unique:users',
'pwd' => 'required',
'permission' => 'required',
]);
if ($validator->fails()) {
return redirect()->route('home')->withErrors($validator);
}
$user = new User();
$user->name = request('name');
$user->surname = request('surname');
$user->email = request('email');
$user->password = Hash::make(request('pwd'));
$user->permission = request('permission');
$user->save();
$message_correct = request('name')." ".request('surname')." has been correctly inserted!";
return redirect()->route('home')->with('success', $message_correct);
}
目前,表单提交正常,并正确重定向到主页视图。但是,如果提交失败,它会保留在同一页面上 (adminArea.blade.php)。如果提交失败,有没有办法重定向主页视图中的错误?
正如我在你的验证中看到的那样,你正在使用 Illuminate\Foundation\Validation\ValidatesRequests@validate
方法来验证你的数据,这样你应该使用 try catch
块来捕获 ValidationException
验证失败。
我建议你使用Validator
,所以你的方法如下:
use Illuminate\Support\Facades\Validator
public function insert_user(Request $request)
{
$validator = Validator::make($request, [
'name' => 'required',
'surname' => 'required',
'email' => 'required|email|unique:users',
'pwd' => 'required',
'permission' => 'required',
]);
if($validator->fails()) {
return redirect()->route('home')->withErrors($validator);
}
$user = new User();
$user->name = request('name');
$user->surname = request('surname');
$user->email = request('email');
$user->password = Hash::make(request('pwd'));
$user->permission = request('permission');
$user->save();
$message_correct = request('name') . " " . request('surname') . " has been correctly inserted!";
return redirect()->route('home')->with('success', $message_correct);
}
我正在使用 Laravel 6,我创建了一个表单来将新用户插入到我的数据库中。如果验证器失败,我想更改重定向方法的路由。我尝试了很多次,但总是在验证器失败时,我在当前视图 (adminArea.blade.php) 而不是主视图 (home.blade.php) 中看到错误。
public function insert_user(Request $request)
{
$this->validate($request, [
'name' => 'required',
'surname' => 'required',
'email' => 'required|email|unique:users',
'pwd' => 'required',
'permission' => 'required',
]);
if ($validator->fails()) {
return redirect()->route('home')->withErrors($validator);
}
$user = new User();
$user->name = request('name');
$user->surname = request('surname');
$user->email = request('email');
$user->password = Hash::make(request('pwd'));
$user->permission = request('permission');
$user->save();
$message_correct = request('name')." ".request('surname')." has been correctly inserted!";
return redirect()->route('home')->with('success', $message_correct);
}
目前,表单提交正常,并正确重定向到主页视图。但是,如果提交失败,它会保留在同一页面上 (adminArea.blade.php)。如果提交失败,有没有办法重定向主页视图中的错误?
正如我在你的验证中看到的那样,你正在使用 Illuminate\Foundation\Validation\ValidatesRequests@validate
方法来验证你的数据,这样你应该使用 try catch
块来捕获 ValidationException
验证失败。
我建议你使用Validator
,所以你的方法如下:
use Illuminate\Support\Facades\Validator
public function insert_user(Request $request)
{
$validator = Validator::make($request, [
'name' => 'required',
'surname' => 'required',
'email' => 'required|email|unique:users',
'pwd' => 'required',
'permission' => 'required',
]);
if($validator->fails()) {
return redirect()->route('home')->withErrors($validator);
}
$user = new User();
$user->name = request('name');
$user->surname = request('surname');
$user->email = request('email');
$user->password = Hash::make(request('pwd'));
$user->permission = request('permission');
$user->save();
$message_correct = request('name') . " " . request('surname') . " has been correctly inserted!";
return redirect()->route('home')->with('success', $message_correct);
}