Miguel Angel Muñoz Pozos
Muy bonito me va quedando =>
Axel David Espinosa Meneses
Muy cool bro 👌
Miguel Angel Muñoz Pozos
Gracias bro
¿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.
Route::resource('articulos', 'ArticuloController');
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:
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:
php artisan make:controller Backend/ArticuloController --resource
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.
Route::middleware('auth')->group(function () { Route::resource('articulos', ArticuloController::class)->except('show'); });
Esto garantiza que el contenido administrativo es accesible únicamente después de que el usuario haya iniciado sesión.
¿Cómo listar y mostrar artículos en la vista Index?
El listado de artículos se implementa en el método index del controlador, que recupera los datos de forma descendente y los envía a la vista:
public function index() { $articulos = Articulo::orderBy('id', 'desc')->get(); return view('backend.articulos.index', compact('articulos')); }
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:
<table class="table table-striped"> <thead> <tr> <th>ID</th> <th>Título</th> <th>Acciones</th> </tr> </thead> <tbody> @foreach($articulos as $articulo) <tr> <td>{{ $articulo->id }}</td> <td>{{ $articulo->titulo }}</td> <td> <a href="{{ route('articulos.edit', $articulo->id) }}" class="btn btn-sm btn-primary">Editar</a> <form action="{{ route('articulos.destroy', $articulo->id) }}" method="POST"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-danger">Eliminar</button> </form> </td> </tr> @endforeach </tbody> </table>
¿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.
<form action="{{ route('articulos.destroy', $articulo->id) }}" method="POST"> @csrf @method('DELETE') <!-- Botón de eliminar --> </form>
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.
Miguel Angel Muñoz Pozos
Muy bonito me va quedando =>
Axel David Espinosa Meneses
Muy cool bro 👌
Miguel Angel Muñoz Pozos
Gracias bro
Jorge Luis Chavarriaga Vargas
Jose Luis Barboza Gonzales
buena esa compañero
Alfonso Alexander Briones Ventura
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:
Route::resource('posts', App\Http\Controllers\Backend\PostController::class)->middleware('auth') ->except('show');
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');
Tomas Goldenberg
Gonzalo Miguel Gonzales Garcia
Este profesor es super didáctico. @Italomoralesf.
Cristian Henao
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.
Enrique Gamboa
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.
Melisa Quintero
ErrorException Array to string conversion
Alex Camacho
Profesor¿Tienes ese problema? ¿En que parte de tu código? Danos más información para poder ayudarte :)
Carlos Riquelme González
JAVIER STIVEN MURILLO
Clase propia de bootstrap por supuesto xD
max rioseco
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
<a href="{{ route('posts.index') }}" class="btn btn-sm btn-primary float-end">Crear</a>
Jaime Aedo Sanhueza
si están utlizando bootstrap 5.1, deben poner "float-end" en el botón de crear post.
<a href="{{ route('posts.create') }}" class="btn btn-sm btn-primary float-end">Crear</a>
Engell Eduardo Lopez Mairena
grupo de rutas protegidas Route::middleware(['auth'])->group(function () { .//tus rutas });
en lugar de usar el ->middleware('auth') por cada ruta.
Julian Henao Henao
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
$posts = Post::latest()->get(); return view('posts.index', compact($posts));
Por las siguientes ->
$posts = Post::all(); return view ('posts.index', compact('posts'));
Julian David Alzate Cuervo
esta solución me sirvió para laravel 9
Roberto Antonio Alferes Gomez
#avance
Eduardo Bueno Lopez
Es excelente toda la información que nos dan en el curso.
Doniel Alberto Acosta Contreras
tengo una duda no me rendireciona a la vista en el minuto 7:43 me queda en un ciclo
Oscar Eduardo Muñoz Bernales
¿Cual es la diferencia entre {{ ... }} y {!! ... !!} en las plantillas de blade ?
Juan Carlos Pinzón
{!! … !!} 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
Fabian Gutiérrez
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()?
Iván Gutiérrez
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.
Fabian Gutiérrez
Me parece mejor utilizar orderBy('id', 'desc') y asi aparecen ordenados de la ultima entrada a la primera
Fernando Michel Baladi Tahan
¿Para qué sirve el «except»? No entendí esa parte.
Carlos Eduardo Gomez García
¡Hola! ¿En qué minuto del video se usa? 🤔
Manuel Angel Lemus Recinos
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
Kenneth Angulo L
Lo mas demorado es trabajar en las vistas para que se ven decentes. Y sin embargo veo que me quedo igual que otro companero ! 🤣
.
Manuel Angel Lemus Recinos
si quieren saber algunos de donde o como porque pone posts.edit o posts.destroy, pueden ver que las rutas que reamos con
Route::resource('posts', 'Backend\PostController') ->middleware('auth') ->except('show');
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
php artisan route:list
lo que les mostrara esto
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');
RESUMEN Index administrativo A) Rutas B)Controller C)Vistas
A)"web.php Route::resource("/posts", "Backend\PostController") ->middleware('auth') ->except("show"); //x seguridad B)"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.php sudo php artisan make:controller Backend/PostController --resource --model=Post "PostController.php public function index() { $posts = Post::latest()->get(); return view("posts.index", compact('posts'));} //envia los datos a la vista // C) AHORA SI HACEMOS LOGIN NOS LLEVA A /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 admin Ahora creamos un -un container con titulo Articulos y un boton de creacion -en su interior arriba tiene ID TITLE Y UN BOTON DE CREACION Y OTRO DE ELIMINACION -"resources/views CREAMOS CARPETA POSTS //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>
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.
Route::resource('posts', PostController::class ) ->middleware('auth') ->except(['show']);