我正在使用Laravel 5.4项目,并且有多个网页使用相同的网址。 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);
}
}
答案 0 :(得分:0)
我不知道您是在控制器中还是在请求中进行验证。但是我可以看到你重定向back(),它必须来自你的控制器。
我的建议是你在控制器中使用formRequest类而不是验证器。
你看,FormRequest类的getRedirectUrl()方法测试了类上的一些特殊属性,如果它没有找到任何值,它会使用Illuminate \ Routing \ UrlGenerator回退到重定向: :previous()生成的URL。 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);
}
答案 1 :(得分:0)
使用相同的方法(init())处理post请求会更容易。 这样你就需要重定向,但只显示错误。
用户可以轻松纠正错误(因为表单可以填写,并且会自动再次显示)并再次提交表单。