2015-06-26 7 views
22

Come reindirizzare alla pagina del modulo, con i parametri POST specificati, se la mia azione modulo genera un'eccezione?Come reindirizzare a form con input - Laravel 5

+1

Sapete che ho dovuto cambiare la domanda solo perché mi avete chiesto e risposto allo stesso tempo. – whoacowboy

+0

Ho pensato che sarebbe stato utile per gli altri.Non ho trovato la soluzione così ho scavato attraverso il codice sorgente per vedere come viene gestito automaticamente con Form Validation – infomaniac

+0

Lo apprezzo sempre. – whoacowboy

risposta

31

È possibile utilizzare il seguente:

return Redirect::back()->withInput(Input::all()); 

Se stai usando Form Request Validation, questo è esattamente il modo laravel vi reindirizzerà indietro con gli errori e la data di ingresso.

Estratto dal \Illuminate\Foundation\Validation\ValidatesRequests:

return redirect()->to($this->getRedirectUrl()) 
        ->withInput($request->input()) 
        ->withErrors($errors, $this->errorBag()); 
+0

Inoltre, puoi usare 'indietro()'. http://laravel.com/docs/5.1/responses#redirects – lesssugar

+1

No, non mantiene i parametri di input – infomaniac

+3

Certo, lo so: 'return redirect() -> back() -> withInput();' It's solo una macro a portata di mano. – lesssugar

22

scrivere vecchia funzione sui vostri campi valore ad esempio

<input type="text" name="username" value="{{ old('username') }}"> 
+0

Questo funziona per Laravel 5.1 – TodStoychev

+1

Grazie! Sto usando Laravel 5.2 e questo funziona anche per me. Insieme alla funzione 'old()' nel nostro template blade, dobbiamo anche usare 'withInput()' nel nostro controller per farlo funzionare. Like => 'if ($ validate-> fail()) return redirect (" somepage ") -> withErrors ($ validate) -> withInput();' –

+2

Qualsiasi idea su come eseguire questa operazione per 'select ' –

2

ho gestire le eccezioni di convalida in laravel 5.3 come questo. Se usi Laravel Collective, visualizzerà automaticamente gli errori accanto agli input e se usi laracasti/flash mostrerà anche il primo errore di convalida come avviso.


Handler.php render:

public function render($request, Exception $e) 
{ 
    if ($e instanceof \Illuminate\Validation\ValidationException) { 
     return $this->handleValidationException($request, $e); 
    } 

    (..) 
} 

E la funzione:

protected function handleValidationException($request, $e) 
    { 
     $errors = @$e->validator->errors()->toArray(); 
     $message = null; 
     if (count($errors)) { 
      $firstKey = array_keys($errors)[0]; 
      $message = @$e->validator->errors()->get($firstKey)[0]; 
      if (strlen($message) == 0) { 
       $message = "An error has occurred when trying to register"; 
      } 
     } 

     if ($message == null) { 
      $message = "An unknown error has occured"; 
     } 

     \Flash::error($message); 

     return \Illuminate\Support\Facades\Redirect::back()->withErrors($e->validator)->withInput(); 
    } 
1

laravel 5:

return redirect(...)->withInput(); 

per tornare solo:

return back()->withInput(); 
+1

' return back() -> withInput(); ' –

+0

Nice! Stavo passando' $ request-> all() 'a questo metodo, ma è bene sapere che non è necessario. –

4

Nel codice HTML è necessario utilizzare value = {{ old('') }}. Senza utilizzarlo, non è possibile recuperare il valore perché la sessione verrà archiviata nella cache.

Come per una convalida nome, questo essere-

<input type="text" name="name" value="{{ old('name') }}" /> 

Ora, è possibile ottenere il valore dopo la presentazione che se c'è errore di reindirizzamento.

return redirect()->back()->withInput(); 

Come @infomaniac dice, è anche possibile utilizzare il Input class direttamente,

return Redirect::back()->withInput(Input::all()); 

Add: Se si mostra solo il campo specifico, quindi utilizzare $request->only()

return redirect()->back()->withInput($request->only('name')); 

Spero, potrebbe funzionare in ogni caso, grazie.

+1

grazie. –