![](/img/trans.png)
[英]Laravel 5.4: How do I redirect back to correct page when I have 3 post pages using the same url?
[英]How do I redirect back when validation fails in Laravel 5.4?
我正在一个Laravel 5.4项目上,并且有多个具有相同URL的页面
例如www.blahblah.com/order/verify/{encryption_key}
我的溃败是:
Route::get('/order/verify/{encrypted_key}','PinVerificationController@init');
Route::post('/order/verify/{encrypted_key}','PinVerificationController@pinValidation');
流程是,他们首先登陆页面并输入电话号码,然后进入第二页面,必须输入密码。 我会验证密码是否为数字,如果不是,那么我将返回一条错误消息。 但是它们却被重定向到第一页。
如果验证失败,我将返回。 我正在做
return \Redirect::back()->withInput()->withErrors($validator);
但这是路由到GET页面而不是POST页面。
为什么会这样呢?
更新#1
public function init(){
$country_extensions = appUtils::getCountryExtensionDropdown();
//TODO
$country_iso_code = "1-US";
$parameters = compact( 'country_extensions','country_iso_code' );
return view('/pages/choose_phone_verify_method',$parameters);
}
private function pinValidation(Request $request){
$validator = \Validator::make($request->all(), [
'pin_number' => 'required|numeric'
]);
if ($validator->fails()) {
return \Redirect::back()->withInput()->withErrors($validator);
}
}
我不知道您是在控制器中还是在请求中进行验证。 但正如我所见,您重定向了back(),它必须来自您的控制器。
我的建议是您使用formRequest类而不是控制器中的验证器。
您会看到FormRequest类的getRedirectUrl()方法测试了该类的某些特殊属性,如果找不到任何值,则使用Illuminate \\ Routing \\ UrlGenerator :: previous()返回到重定向。 )生成的网址。 FormRequest检查的那些属性是您拥有的重定向选项。
现在,您有两种更改方式,可以通过将属性放在每个表单请求类都继承的抽象类App \\ Http \\ Requests \\ Request中来全局更改所提出的每个表单请求。 或者,特别是表单类,只需将其放入表单类本身即可。
这些是自定义重定向的所有选项:
protected $redirect; // A simple URL. ex: google.com
protected $redirectRoute; // A route name to redirect to.
protected $redirectAction; // A controller action to redirect to.
但是,如果您坚持在控制器中进行验证,则可以编写if语句。 因此,在这种情况下,如果验证程序失败,它将重定向到特定的路径,例如页面2的路径。 像下面的代码:
if ($validator->fails()) {
return redirect('path to page 2')->withInput()->withErrors($validator);
}
或者,您可以重定向到路由名称:
if ($validator->fails()) {
return redirect(route('route name'))->withInput()->withErrors($validator);
}
只用相同的方法(init())处理发布请求会不会更容易。 这样,您将需要重定向,但仅显示错误。
用户可以轻松地纠正自己的错误(因为可以填写表格,并且会自动再次显示它),然后再次提交表格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.