php - How do you flash Request data if a Validator fails in Laravel 5? -


i've created simple contact form in laravel 5, using request object , validator object check input errors.

the form in view coded in html, rather laravel form object, isn't included default in laravel 5.

i need set form if validation rule fails, user's input flashed session doesn't disappear when page redirects. able accomplish putting $request->flash() in post controller, before validation code.

however, not want data flashed (i.e, form should reset) if validation passes , form emailed. there's no apparent way me accomplish in $this->validate block, since laravel helpfully handles redirects automatically.

how can tell laravel flash form data if there validation error?

<?php  namespace app\http\controllers;  use illuminate\http\request;  use app\http\requests; use app\http\controllers\controller;  class contactcontroller extends controller { /**  * show form creating new resource.  *  * @return response  */ public function create() {     return view('contact'); }  /**  * store newly created resource in storage.  *  * @param  request  $request  * @return response  */ public function store(request $request) {     // flash current input in case validator fails , redirects     $request->flash();      // validate form request, redirect on fail     $this->validate($request, [         'name' => 'required',         'email' => 'required|email',         'subject' => 'required',         'message' => 'required|min:5',     ]);      // generate email template , send     \mail::send('emails.feedback',         array(             'name' => $request->get('name'),             'email' => $request->get('email'),             'user_message' => $request->get('message'),             'subject' => $request->get('subject')         ), function($message) use ($request)         {             $message->from( \config::get('site.from_email') );             $message->to( \config::get('site.contact_email') , 'admin' );             $message->subject( \config::get('site.name').': '. $request->get('subject') );         });      // redirect contact route success message     return \redirect::route('contact')     ->with('message', 'thanks contacting us!'); } 

}

just remove following line of code:

$request->flash(); 

laravel take care of flashing data on failed validation. following method gets called on failed validation:

/**  * create response when request fails validation.  *  * @param  \illuminate\http\request  $request  * @param  array  $errors  * @return \illuminate\http\response  */ protected function buildfailedvalidationresponse(request $request, array $errors) {     if ($request->ajax() || $request->wantsjson()) {         return new jsonresponse($errors, 422);     }      return redirect()->to($this->getredirecturl())                     ->withinput($request->input()) // <-- flashes inputs                     ->witherrors($errors, $this->errorbag()); // <-- flashes errors } 

this trait used in controller validating request , it's located @ illuminate/foundation/validation, name validatesrequests. check clarify yourself.

alternatively, may manually if want reason, check the documentation.


Comments