A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Validaci贸n

9/23
Recursos

Aportes 5

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Una mejor pr谩ctica para hacer validaciones dentro de Laravel es usar los 鈥淔orm 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

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

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

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);
    }

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.