簡體   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