Validaciones

  • En app/Http/Livewire/CreatePost.php:
 protected $rules = [
    'title' => 'required|max:100',
    'content' => 'required|max:150',
];
 public function save()
{
    $this->validate();

    ...
}
  • En resources/views/livewire/create-post.blade.php:
@error('title')
    <span>{{ $message }}</span>            
@enderror

y

@error('content')
    <span>{{ $message }}</span>            
@enderror

Una mejor manera para mostrar el mensaje de error es usar un componente jet asi:

<x-jet-input-error for='title' />
y
<x-jet-input-error for='content' />

Validación en tiempo real cada vez que se da una letra checa si cumple con las reglas de validación, entonces en app/Http/Livewire/CreatePost.php:

 // se ejecuta cada vez que cambia una de las propiedades title or content
public function updated($propertyName)
{
    // cada vez que se da una letra checa si cumple con las reglas de validación
    $this->validateOnly($propertyName);
}

Y tenemos que quitar el defer en resources/views/livewire/create-post.blade.php:

<div class="mb-4">
    <x-jet-label value="Título del Post"></x-jet-label>
    <x-jet-input type="text" class="w-full" wire:model="title"></x-jet-input>
    <x-jet-input-error for='title' />
</div>

Listo!