繁体   English   中英

当Laravel 5.4中的验证失败时,我该如何重定向回去?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM