Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

janmoes's avatar

Validation messages not showing anymore

Hi there, I didn't change anything special in my project. But for all my form validation cases, the validation messages stopped showing. This for example is my user update validator

$request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users,email,'.$user->id,
            'unique_url' => 'required|unique:users,unique_url,'.$user->id,
            // 'role' => 'required',
        ]);

this is how I print all my error messages per field.

@if($errors->has('email'))
                        <div class="alert alert-danger">
                            {{ $errors->first('email') }}
                        </div>
                        @endif

But when I do this:

@if($errors)
     {{ dd($errors->all()) }}
@endif

it returns:

array:1 [▼
  0 => "The name field is required."
]

(left the name field empty, to create the error) Does anyone know what the problem is? I see that the error key is 0 rather than name. So that might be the problem. But not sure how to fix this. Cause I didn't have this problem before.

0 likes
13 replies
Armani's avatar

@janmoes There must be an issue with your code, How about this syntax:

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

Debug your code.

janmoes's avatar

@Armani That doesn't show either. Is there any kind of code in particular, that you want to see?

janmoes's avatar

@Armani

public function update(Request $request, User $user)
    {
        $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users,email,'.$user->id,
            'unique_url' => 'required|unique:users,unique_url,'.$user->id,
            // 'role' => 'required',
        ]);
        if($request->has('role')){
            $user->syncRoles([$request->role]);
        }
        $user->update($request->all());
        return redirect()->route('users.index')->with('success', 'Gebruiker is succesvol bijgewerkt.');
    }

div class="user-table">
                <form action="{{route('users.update', $user->id)}}" method="post">
                    {{-- @if($errors->any())
                        {{dd($errors->all())}}
                    @endif --}}
                    @csrf
                    @method('PUT')
                    <div class="form-group group-border">
                        <input type="text" name="name" value="{{$user->name}}" class="form-control custom-input" />
                        @if($errors->has('name'))
                        <div class="alert alert-danger">
                            {{ $errors->first('name') }}
                        </div>
                        @endif
                    </div>
                    <div class="form-group group-border">
                        <input type="text" name="email" value="{{$user->email}}" class="form-control custom-input" />
                        @if($errors->has('email'))
                        <div class="alert alert-danger">
                            {{ $errors->first('email') }}
                        </div>
                        @endif
                    </div>
                    <div class="form-group group-border">
                        <input type="text" name="unique_url" value="{{$user->unique_url}}" placeholder="Unique url" class="form-control custom-input" />
                        @if($errors->has('unique_url'))
                        <div class="alert alert-danger">
                            {{ $errors->first('unique_url') }}
                        </div>
                        @endif
                    </div>
                    <div class="form-group group-border">
                        <select name="role" class="form-control">
                            <option value=""></option>
                            @foreach($roles as $role)
                                <option value="{{$role->name}}" @if(isset($user->roles->first()->name) && $user->roles->first()->name == $role->name) selected @endif >{{$role->name}}</option>
                            @endforeach
                        </select>
                        @if($errors->has('role'))
                        <div class="alert alert-danger">
                            {{ $errors->first('role') }}
                        </div>
                        @endif
                    </div>
                    <div class="form-group group-border">
                        <img style="width: 100px;" src="{{asset('storage/img/profile_img/'.$user->image)}}" />
                    </div>
                    <input type="submit" name="submit" value="Save" class="btn cnnect-btn btn-sm"/>
                    @if ($errors->any())
                        <div class="alert alert-danger">
                            <ul>
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul>
                        </div>
                    @endif
                </form>    
janmoes's avatar

@tisuchi

public function update(Request $request, User $user)
    {
        $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|unique:users,email,'.$user->id,
            'unique_url' => 'required|unique:users,unique_url,'.$user->id,
            // 'role' => 'required',
        ]);
        if($request->has('role')){
            $user->syncRoles([$request->role]);
        }
        $user->update($request->all());
        return redirect()->route('users.index')->with('success', 'Gebruiker is succesvol bijgewerkt.');
    }

Yeah. It's really weird, that at first, validation messages worked everywhere, and all out of a sudden, they stopped showing.

tisuchi's avatar

@janmoes Can you try this?

public function update(Request $request, User $user)
{
      $validator = $request->validate([
          'name' => 'required|max:255',
          'email' => 'required|email|unique:users'.
          'unique_url' => 'required|unique:users',
          // 'role' => 'required',
      ]);

      if ($validator->fails()) {
            return redirect()
	    	->back()
                ->withErrors($validator)
                ->withInput();
        }


      if($request->has('role')){
          $user->syncRoles([$request->role]);
      }

      $user->update($request->all());

      return redirect()->route('users.index')->with('success', 'Gebruiker is succesvol bijgewerkt.');
}
janmoes's avatar

@tisuchi I get this error on the if statement with ->fails()

Expected type 'object'. Found 'array'.
Armani's avatar

Run this:

php artisan optimize:clear

Are you sure there's a validation error to display?

janmoes's avatar

@Armani I ran that, but still no differences. And yeah I'm pretty sure. It worked before. I haven't touched this project in a while. And today when I tried to edit a user, I found out the errors weren't displaying anymore.

janmoes's avatar
janmoes
OP
Best Answer
Level 2

I fixed the issue. There wasn't a problem with my code. It appeared that a JS library it's CSS had also a class .alert on display: none which made my error messages invisible. Maybe next time, use some more precise class names to prevent these kind of issues in the near future.

Please or to participate in this conversation.