Search code examples
phplaravellaravel-4laravel-blade

Displaying the Error Messages in Laravel after being Redirected from controller


How can I display the validation message in the view that is being redirected in Laravel ?

Here is my function in a Controller

public function registeruser()
{
    $firstname = Input::get('firstname');
    $lastname = Input::get('lastname');
    $data  =  Input::except(array('_token')) ;
    $rule  =  array(
                'firstname'       => 'required',
                'lastname'         => 'required',
                   ) ;
    $validator = Validator::make($data,$rule);
    if ($validator->fails())
    {
    $messages = $validator->messages();
    return Redirect::to('/')->with('message', 'Register Failed');
    }
    else
    {
    DB::insert('insert into user (firstname, lastname) values (?, ?)',
                                array($firstname, $lastname));
    return Redirect::to('/')->with('message', 'Register Success');
    }
    }

I know the below given code is a bad try, But how can I fix it and what am I missing

@if($errors->has())
    @foreach ($errors->all() as $error)
        <div>{{ $error }}</div>
    @endforeach
@endif

Update : And how do I display the error messages near to the particular fields


Solution

  • Laravel 4

    When the validation fails return back with the validation errors.

    if($validator->fails()) {
        return Redirect::back()->withErrors($validator);
    }
    

    You can catch the error on your view using

    @if($errors->any())
        {{ implode('', $errors->all('<div>:message</div>')) }}
    @endif
    

    UPDATE

    To display error under each field you can do like this.

    <input type="text" name="firstname">
    @if($errors->has('firstname'))
        <div class="error">{{ $errors->first('firstname') }}</div>
    @endif
    

    For better display style with css.

    You can refer to the docs here.

    UPDATE 2

    To display all errors at once

    @if($errors->any())
        {!! implode('', $errors->all('<div>:message</div>')) !!}
    @endif
    

    To display error under each field.

    @error('firstname')
        <div class="error">{{ $message }}</div>
    @enderror