Cómo usar Form Request en Livewire


Victor Arana Flores

18 Jul 2023

Por defecto, Livewire no permite el uso de clases Form Request para la validación. Sin embargo, como ocurre con muchas cosas, hay una solución alternativa.

Es posible que te preguntes si puedes usar las "FormRequest" de Laravel. Debido a la naturaleza de Livewire, no tendría sentido conectar con la solicitud HTTP. Por ahora, esta funcionalidad no es posible ni recomendada.

Supongamos que tenemos un modelo Post con dos campos: title y body. Ambos campos deben ser obligatorios y de tipo string. En tu Form Request, agrega las reglas:

class PostRequest extends FormRequest
{
    public function rules(): array
    {
        return [
            'title' => ['required', 'string'], 
            'body'  => ['required', 'string'], 
        ];
    }
 
    public function authorize(): bool
    {
        return true;
    }
}

En el componente de Livewire, puedes agregar reglas en el método rules() devolviendo un array. En este método, puedes devolver el método rules() de tu Form Request. Solo no olvides que las propiedades públicas en el componente de Livewire deben tener el mismo nombre que las reglas.

En tu componente:

class PostForm extends Component
{
    public string $title; 
    public string $body; 
 
    protected function rules(): array 
    {
        return (new PostRequest())->rules();
    } 
 
    public function render(): View
    {
        return view('livewire.post-form');
    }
}

Ahora, como de costumbre, antes de guardar, puedes validar el formulario.

class PostForm extends Component
{
    public string $title;
    public string $body;
 
    public function save()
    {
        $this->validate(); 
        // ...
    }
 
    protected function rules(): array
    {
        return (new PostRequest())->rules();
    }
 
    public function render(): View
    {
        return view('livewire.post-form');
    }
}

1 comentarios

Inicia sesión para comentar

Comentarios:

  • Eduardo Cauich

    Eduardo Cauich hace 1 año

    En caso de ser update, y que también válide si ya existe el dato. Cómo sería. Saludos