![](/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.