Gestión de Artículos en Laravel: Rutas, Controladores y Vistas
Resumen
¿Cómo trabajar con la parte administrativa de un proyecto en Laravel?
Gestión eficiente de un proyecto necesita tanto la configuración de su componente público como la administración privada. En esta sección, abordaremos cómo crear y configurar rutas y controladores que faciliten la administración de artículos de manera ordenada y segura.
¿Cuál es el primer paso al crear rutas en Laravel?
Antes de empezar a desarrollar funcionalidades es crucial establecer rutas eficientes. Al trabajar en el módulo de Artículos, se debe iniciar creando una ruta tipo recurso. Una ruta tipo recurso permite generar automáticamente varias acciones como mostrar, crear, editar y eliminar desde un solo controlador.
Este tipo de ruta se configura rápidamente y es muy eficiente para mantener el orden y escalabilidad del proyecto.
¿Cómo organizar el código dentro de carpetas?
Para mantener un proyecto limpio se recomienda segmentar los archivos en directorios lógicos. En este caso, la idea es separar lo público de lo privado:
Contenido Público: Se mantiene fuera de la carpeta 'Backend'.
Contenido Privado: Se aloja dentro de una carpeta 'Backend'.
Al aplicar el comando para crear un controlador con el nombre específico y asociarlo a la arquitectura de Laravel, se logra un orden claro:
Este enfoque no solo simplifica el mantenimiento, sino que aumenta la legibilidad para equipos que trabajen múltiples aspectos del mismo proyecto.
¿Cómo proteger rutas en Laravel?
Proteger rutas es un paso esencial para asegurar la seguridad del sitio web. Al definir la ruta para la sección de administración, se debe utilizar un middleware que asegure que solo usuarios autenticados puedan acceder.
Esta técnica asegura que los datos más recientes se muestren primero, manteniendo la información relevante siempre visible.
¿Cómo se implementa el diseño de la tabla en la vista?
Dentro de la vista, la implementación de una estructura de tabla que despliegue los datos es necesaria. Acompañando al frontal con la biblioteca Bootstrap, facilita la estilización y funcionalidad:
¿Cómo se utiliza el CSRF y los métodos en formularios?
Para salvaguardar los formularios de posibles ataques CSRF (Cross-site Request Forgery), Laravel ofrece un middleware que es esencial al trabajar en formularios que pueden modificar información sensible.
El uso de @csrf inserta un token de seguridad, mientras que @method('DELETE') señala que la petición HTTP será de tipo DELETE, crucial al implementar un CRUD.
Este proceso no sólo protege la aplicación, sino que también establece las mejores prácticas al desarrollar y mantener proyectos seguros con Laravel, proporcionando así un entorno confiable y escalable.
SI les aparece el error a continuacion en laravel 8, al momento de ir al index del post
**Target class [Http\Controllers\Backend\PostController] does not exist.
**
en las rutas pueden cambiar la ruta de la siguiente manera
use App\Http\Controllers\Backend\SubtipoController;Route::resource('/posts',PostController::class)->middleware('auth')->except('show');
buena esa compañero
ya puse en practica el use, pero al ir a la ruta me sigue dando un 404
En #Laravel 8 la ruta quedaria de la siguiente manera:
También puede poner arriba una llamado a la clase así:
use App\Http\Controllers\Backend\PageController;Route::resource('posts',[PageController::class])->middleware('auth')->except('show');
a mi me funciono este código usando el llamado a clase
use App\Http\Controllers\Backend\PostController;
RESUMEN
Index administrativo
A) Rutas
B)Controller
C)Vistas
A)"web.phpRoute::resource("/posts","Backend\PostController")->middleware('auth')->except("show");//x seguridadB)"Controller.yase que tenemos un PostController conectado con Post y esta vacio..eliminalo porque lo vamos a crear dentro de la carpeta Http/Controllers/Backend/PostController.phpsudo php artisan make:controller Backend/PostController--resource --model=Post"PostController.phppublicfunctionindex(){ $posts =Post::latest()->get();returnview("posts.index",compact('posts'));}//envia los datos a la vista //C)AHORASIHACEMOSLOGINNOSLLEVAA/home , que es un dashboard
ahi vamos a crear un boton que nos lleve a los articulos
"resources/views/layout/app.blade.php//1 si sos invitado de te lleva al register//2 si pasaste el auth---- @guest
<li class="nav-item"><a class="nav-link" href="{{ route('login') }}">{{__('Login')}}</a></li> @if(Route::has('register'))//1<li class="nav-item"><a class="nav-link" href="{{ route('register') }}">{{__('Register')}}</a></li> @endif
@else//2<li class="nav-item"><a href="{{route('posts.index')}}"class="nav-link">Articulos</a></li><li class="na
//agregamos el <li> con el link a posts.index//ya tenemos el boton en el dashboard de adminAhora creamos un
-un container con titulo Articulos y un boton de creacion
-en su interior arriba tiene
IDTITLEYUNBOTONDECREACIONYOTRODEELIMINACION-"resources/views CREAMOSCARPETAPOSTS//resources/views/index.blade.php//encabezado container<div class="card-header">Articulos<a href="{{ route('posts.create') }}"class="btn btn-sm btn-primary float-right">Crear</a>// posts.index es el nombre de la ruta que devuelve los posts en el method index de PostController--></div>//container body<div class="card-body"> @if(session('status'))<div class="alert alert-success" role="alert">{{session('status')}}</div> @endif
//parte superior ID TITLULO <table class="table"><thead><tr><th>ID</th><th>TITULO</th><th colspan="2"> </th></tr></thead>//CADA ELEMENTO TIENE el post id y el post title y botones para editar y eliminar<tbody> @foreach($posts as $post)<tr><td>{{$post->id}}</td><td>{{$post->title}}</td><td><a href="{{ route('posts.edit', $post) }}"class="btn btn-sm btn-primary">Editar</a></td><td><form action="{{ route('posts.destroy',$post) }}" method="POST"> @csrf
@method("DELETE")<input
type="submit" value="Eliminar"class="btn btn-danger" onclick="return confirm('Deseas eliminar el Articulo?')"></form></td></tr> @endforeach
</tbody></table></div></div></div>
Este profesor es super didáctico.
@Italomoralesf.
En algunos momentos del curso, no se entiende muy bien que se está haciendo, sólo que él está haciendo algo y al final apenas nos damos cuenta que era lo que estabamos haciendo.
Eso es cierto, pero eso sucede porque se supone que todo lo que hace ya lo hemos visto en clases/cursos anteriores y ya deberíamos saberlo. Además, en mi experiencia con otros cursos de este profesor, algunas veces puede parecer muy abrumadora la cantidad de información que nos enseña, pero al final del curso todo tiene perfecto sentido y ya entiendes el porqué de algunas de tus dudas. Y si no es así, siempre puedes contar con esta maravillosa comunidad, para eso estamos.
ErrorException
Array to string conversion
¿Tienes ese problema? ¿En que parte de tu código? Danos más información para poder ayudarte :)
Hola Melisa,
Para solucionar ese error, verifica lo siguiente por favor:
Si estás trabajando con Laravel 8, abre el archivo web.php ubicado dentro de la carpeta routes
y trabaja la ruta de esta forma.
En nibuti 5:57, si están con Laravel 9, bootstrap es 5, en ese caso el boton "Crear" no se alinea a la derecha pues float-right está deprecado en BS 5. Usar float-end
grupo de rutas protegidas
Route::middleware(['auth'])->group(function () {
.//tus rutas
});
en lugar de usar el ->middleware('auth') por cada ruta.
Si por algún motivo les sale el siguiente error
ErrorException Undefined variable: posts - $posts is undefined.
Lo solucioné cambiando estas lineas del PostController.php
Es excelente toda la información que nos dan en el curso.
tengo una duda no me rendireciona a la vista en el minuto 7:43 me queda en un ciclo
¿Cual es la diferencia entre {{ ... }} y {!! ... !!} en las plantillas de blade ?
{!! … !!} Estas lo que hacen es escapar el html, es decir que si lo que vas a "imprimir" tiene código html no lo va a renderizar
Tengo una duda
¿Por que me aparece la lista de artículos desorganizada?
Me aparece primero el id 19 al 24, despues sigue del 1 al 18, ¿será por el método latest()?
Sí, exactamente es por eso. Lo que hace el método latest() en eloquent, es entregar los registros ordenados por fecha de creación, por lo que el último registro creado va a ir primero.
El que al principio aparezcan ordenados es debido a que fueron hechos con el factory al mismo tiempo, aunque desconozco los detalles específicos.
Me parece mejor utilizar orderBy('id', 'desc') y asi aparecen ordenados de la ultima entrada a la primera
¿Para qué sirve el «except»? No entendí esa parte.
¡Hola! ¿En qué minuto del video se usa? 🤔
cuando el profe lo usa en la parte de las rutas es para excluir la ruta "show",
cuando tu creas un controlador de tipo recurso crea muchas urls y la url show ya la tenemos que bueb siendo la vitsa de blog/slug
Lo mas demorado es trabajar en las vistas para que se ven decentes.
Y sin embargo veo que me quedo igual que otro companero ! 🤣
.
si quieren saber algunos de donde o como porque pone posts.edit o posts.destroy,
pueden ver que las rutas que reamos con
esas lineas nos generan las urls de un crud ademas que les añade un name a la ruta como lo emos visto en clases pasadas, si quieren ver que name tiene la ruta puede utilizar este comando