Visualizar un registro individual es una operación fundamental en cualquier aplicación web, y hacerlo correctamente implica validar que solo el propietario del recurso pueda acceder a él. A continuación se explica paso a paso cómo configurar el método show en un controlador de Laravel, protegerlo con una política de acceso y verificar todo mediante pruebas automatizadas.
¿Cómo crear las pruebas para el método show?
El punto de partida es el archivo de testing donde ya se han configurado pruebas previas como update y update de póliza. La estructura de la prueba para show es similar, por lo que se puede tomar como base una prueba existente y adaptarla [01:00].
La lógica de la prueba sigue estos pasos:
Se crea un usuario y se inicia sesión con él.
Se crea un repositorio asociado a ese usuario.
Se realiza una petición GET a la ruta del repositorio individual.
Se verifica que el status HTTP sea 200 (ok).
No se necesita enviar data adicional, ya que solo se consulta información. Opcionalmente se puede verificar que la respuesta contenga el ID, la URL o la descripción del repositorio, tal como se hizo previamente en la prueba del método index [02:30].
Para la prueba de la política de acceso (show policy), se crea un repositorio con un usuario distinto al autenticado. Al intentar acceder con GET, se espera recibir un error que confirme que el acceso está denegado [03:10].
¿Cómo configurar el controlador para mostrar un registro individual?
Dentro del archivo RepositorioController, el método show se ubica justo después del index. Su estructura se inspira en el método de eliminación, ya que ambos utilizan la política de acceso [04:00].
El método recibe dos parámetros: el request y el repositorio que se desea visualizar. Internamente realiza lo siguiente:
Ejecuta la política de acceso para verificar que el usuario autenticado sea el propietario del repositorio.
Retorna una vista llamada repositorios.show, pasándole la variable del repositorio.
php
public function show(Request $request, Repositorio $repositorio)
{
$this->authorize('pass', $repositorio);
El método authorize garantiza que solo el dueño del recurso pueda visualizarlo. Si la validación falla, Laravel devuelve automáticamente un error de autorización [04:45].
¿Cómo crear la vista show en Blade?
La vista se crea en resources/views/repositorios/show.blade.php. A diferencia del index, que muestra una tabla con múltiples registros, show presenta un registro individual [05:30].
Además, en la vista del index se agrega un enlace para acceder al detalle de cada repositorio [06:20]:
html
<a href="{{ route('repositorios.show', $repositorio) }}">Ver</a>
Este enlace utiliza la función route apuntando a repositorios.show y pasa la variable del repositorio individual. Se emplea para agregar un espacio visual y se ajusta el diseño para que ocupe tres columnas dentro del layout [06:50].
¿Cómo verificar que todo funciona correctamente?
Al ejecutar php artisan test en la terminal, todas las pruebas previas pasan exitosamente, y tanto el show como el show policy se validan sin errores [07:10]. Esto confirma que:
El método show retorna el registro correctamente.
La política de acceso impide que usuarios no autorizados visualicen repositorios ajenos.
La vista muestra la información esperada.
La clave de esta implementación es que el código queda completamente testeado, lo que permite copiar, adaptar y reutilizar patrones con confianza. La política de validación, la política de acceso y la visualización de datos en una vista Blade son piezas que ya se dominan de clases anteriores y se combinan aquí de forma natural.
Ahora es tu turno de implementar esta configuración y comprobar los resultados en tu proyecto. Si tienes dudas sobre la política de acceso o la estructura de la vista, comparte tu experiencia en los comentarios.
Jorge no es una mala práctica pero el usar route(nombre.ruta) nos da ciertas ventajas.
Imagina que construyes toda tu aplicación y por alguna razón debes agregar un caracter más a tus rutas
antes: repositories/
despues: repositories/new/
Imagina ir vista por vista agregando la nueva ruta. Mientra que si usas route() este estará asociado a un nombre y no tendrás que hacer ningun cambio.
Bueno es cuestion de preferencias, para trabajos personales y para escribir codigo rapidito, bueno no pasa nada.
Pero totalmente de acuerdo con el comentario de Abraham.
y es que en un ambiente profesional, y sobre todo en un grupo de trabajo y si el proyecto es bastante grande, la manera ADECUADA es nombrar las rutas y llamarlas usando usando el metodo route().