No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Validación

9/23
Recursos

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Una mejor práctica para hacer validaciones dentro de Laravel es usar los “Form Request” de Laravel, básicamente tu creas un archivo aparte con todas tus validaciones y simplemente le inyectas la dependencia a tu controlador, de esa forma el controlador no se ejecuta hasta que la validación pase y agregas una capa extra de seguridad, recomiendo dar un vistazo 😄
.
https://laravel.com/docs/8.x/validation#creating-form-requests

Me anime a hacer esta practica de una manera diferente. En vez de llamar a validate de la clase Request, cree FormRequest para Repository y directamente esto aplica el validate desde la inyeccion de dependencias. Es mejor practica para no tener que escribir $request->validate() en cada metodo del controlador.

Para crear el FormRequest de Repository:

 php artisan make:request RepositoryRequest

Luego se definen las mismas reglas dentro de RepositoryRequest y en los metodos de controlador en vez de inyectoar Request $request, se inyecta directamente el FormRequest de la siguiente manera:

public function store(RepositoryRequest $request)
    {
        $request->user()->repositories()->create($request->all());
        return redirect()->route("repositories.index");
    }

    public function update(RepositoryRequest $request, Repository $repository)
    {

        $repository->update($request->all());
        return redirect()->route("repositories.edit",$repository);
    }
php artisan test

** Modificaciones**:

  • tests/Feature/Http/Controllers/RepositoryControllerTest.php
    • test_validate_store
    • test_validate_update
  • app/Http/Controllers/RepositoryController.php

Tests:

  • Al enviar datos vacios(create/update), devolver status 302 y mensajes de session

Una alternativa a assertStatus(302) puede ser el método asssertRedirect()

Un tip: en vez de usar el assertStatus(302) podemos usar las constantes del componente de http fundation.

Poner un:

use Symfony\Component\HttpFoundation\Response;

Y luego quedaría así:

        $this->actingAs($user)
            ->post('repositories', [])
            ->assertStatus(Response::HTTP_FOUND)
            ->assertSessionHasErrors(['url', 'description']);

Es mucho más legible a la vista.