Rutas y Controladores en Laravel: Fundamentos Esenciales
Resumen
¿Cómo funcionan las rutas en un proyecto Laravel?
Las rutas en Laravel son cruciales para manejar el flujo de cualquier aplicación web. Son la puerta de entrada para todas las peticiones HTTP y permiten definir qué acción del controlador debe ejecutarse al acceder a un determinado enlace. En términos simples, las rutas vinculan las URL de tu aplicación con su lógica de programación subyacente, representada principalmente por los controladores.
¿Cómo crear rutas básicas en Laravel?
Para crear rutas, primero debes acceder al archivo web.php dentro de la carpeta routes de tu proyecto Laravel. Aquí es donde definirás la mayoría de las rutas de tu aplicación. A continuación, algunos ejemplos de cómo se pueden definir:
En este fragmento de código, creamos una ruta simple que apunta a la raíz del sitio web ('/'), y retorna la vista 'welcome'.
También podemos definir una ruta que haga más que retornar una vista. Por ejemplo, podrías enviar un archivo PDF o datos en formato JSON. La flexibilidad de las rutas en Laravel permite manejar cualquier tipo de respuesta requerida.
¿Cómo retornar directamente una vista desde una ruta?
Laravel ofrece métodos simplificados para ciertas acciones comunes. Uno de ellos es el método view, que permite retornar una vista directamente:
Route::view('/vista','welcome');
Esta línea sustituye el código anterior retornando la misma vista 'welcome' desde la URL '/vista', pero con un solo comando. Esto es particularmente útil para páginas estáticas como "Acerca de nosotros", "Privacidad" o "Términos y servicios".
¿Qué son las rutas de recursos y cómo se usan?
Las rutas de recursos en Laravel son una herramienta poderosa que permite gestionar de manera eficiente los recursos de una aplicación CRUD (Crear, Leer, Actualizar, Eliminar). Una sola línea de código puede generar todas las rutas necesarias para estas operaciones. Vamos a ver cómo se implementa:
¿Cómo generar rutas de recursos?
Generar rutas de recursos es sencillo con Laravel. Aquí se muestra un ejemplo para crear rutas para controlar un recurso llamado 'páginas':
Route::resource('paginas',PageController::class);
Con este método, automáticamente se crean siete rutas: index, create, store, show, edit, update y destroy, todas apuntando a los métodos respectivos dentro de PageController.
Creación del controlador de recursos
Para que estas rutas funcionen, debes crear un controlador que tenga estos métodos. Esto se realiza cómodamente desde la terminal de comandos de Laravel:
Este comando generará un controlador predefinido con los métodos necesarios, integrando completamente tu recurso. Pero aún hay más. Puedes vincular un modelo a este controlador:
Si el modelo Page no existe, Laravel te preguntará si desea crearlo. Esto unifica automáticamente el controlador y el modelo, alineándolos con tu base de datos, permitiendo manejar los datos eficientemente.
¿Por qué Laravel es eficiente para la gestión de rutas y controladores?
Laravel ofrece una manera profesional y automatizada de manejar rutas y controladores, permitiendo a los desarrolladores centrarse en la lógica del negocio en lugar de los detalles de configuración. Con comandos y métodos precisos, puedes generar estructuras complejas con pulidas y en poco tiempo. Esta capacidad de automatización y el sólido marco de trabajo orientado a recursos hace que Laravel sea una elección destacada para muchos desarrolladores que buscan crear aplicaciones web robustas y escalables.
Route::resource: Te permite gestionar 7 rutas junto con un controlador
php artisan make:controller [NombreControlador]: Genera un controlador
php artisan make:controller [NombreControlador] --resource: Genera un controlador con las 7 funciones necesarias que necesita Route::resource
php artisan make:controller [NombreControlador] --resource --model: Genera un controlador con las 7 funciones necesarias que necesita Route::resource así como el modelo necesario para ese controlador
Buen aporte Luis
De hecho si pones php artisan make:model [NombreModelo] -r -m -c
Te crea -r: resource, -m: migración, -c: controlador, te ahorra un poco de código y además hace que tu proyecto esté un poco mas ordenado
Sistema de rutas y controladores
Route → Es una capa encargada de manejar el flujo de nuestra app. Cada ruta va a apuntar a una lógica de programación.
Controller → Nos permite agrupar lógica.
En la carpeta Routes dentro de nuestro proyectos tendremos varios archivos que vienen por defecto. Y sus funcionalidades son:
web.php → En este archivos es donde registraremos las rutas de nuestra aplicación.
console.php → Aquí podremos crear nuestros comandos de consola personalizados.
channels.php → Aquí podemos registrar todos los canales de transmisión de eventos que admite nuestra aplicación.
api.php → En este archivo van la rutas del api.
Lo siguiente puede ser el código para una simple ruta
page.edit → Para el formulario de editar. Métodos disponibles: GET.
Para crear un controlador que tenga todos los métodos que va a manejar, escribimos el comando:
php artisan make:controller **nombre** --resource
Si queremos crear un controlador que además de tener todos los métodos este enlazada a la tabla de la database (el siguiente comando también creará la tabla si no existe) que piensa consultar, utilizamos este comando:
Bikatti, tus apuntes son geniales , gracias por compartirlos
Pero si prefieren no tener que importar el controlador (como en las versiones anteriores). Debes entrar a app/Providers/RouteServiceProvider.php, buscar la linea que dice:
Recuerden que podemos obtener mas información al momento de utilizar un comando usando el flag
--help
Ejemplo:
php artisan make:controller --help
Les estaría desplegando todas las opciones que tienen con ese comando
Podemos omitir un paso de abrir con VSCode utilizando code . despuéß de usar cd routes
O cuando vayan a pasar a una carpeta y abrirlo podemos hacer:
cd <carpeta> && code .
Al usar resource, estamos creando las 7 rutas posibles para un controlador, un controlador básicamente necesita poder realizar las funciones un CRUD, así que al utilizar resources Laravel nos detecta eso y nos crea las rutas que necesitamos, y lo mejor de todo es que, si utilizamos la linea de comandos, Laravel nos deja el código base ya listo y preparado solo para rellenarlo:D
En Laravel 8.x la ruta resource quedaria asi:
<?php
use Illuminate\Support\Facades\Route;use App\Http\Controllers\PageController;Route::resource('pages',PageController::class);
Buen aporte me quede pegado un rato descubriendo la sintaxis de la version 8
gracias por el aporter, tambien funciona para laravel 9
Cuando creamos un controlador con el comando:
php artisan make:controller PageController
Este Controlador se crea vacio, pero cuando le agregamos la opción de --resource
Este crea los 7 métodos correspondientes a las rutas
Wow en un comando creas tanto que genial
:)
Ahora con este solo comando creas:
modelo
migracion
controlador tipo resource
php artisan make:model User--migracion --resource
Que diferencia hay entre una entidad y un modelo ? al final del video lo menciona.
La entidad es la tabla en la base de datos, es donde está almacenada y organizada la información que necesitas.
El modelo es parte del patrón MVC(Modelo, Vista, Controlador) que se encarga de acceder a los datos, modificarlos, etc. Los modelos mantienen lo que se llama la lógica de negocio, que son las reglas que deben cumplirse para trabajar con los datos.
Espero que esto haya aclarado un poco tus dudas. Nunca pares de hacer preguntas.
Laravel ayuda a crear controladores y rutas de forma eficiente, solo debemos preocuparnos de la funcionalidad particular que le queramos dar.
Llevo un año desarrollando con Laravel, y no conocia esas modalidades del Make.
tengo dos años trabajando con php puro y ahora que estoy viendo laravel estoy enamorado de este framework
No me dejó aplicar el último comando con el modelo incluido, ¿alguna idea?
php artisan make:controller PageController--resource --model=PageAApp\Models\Page model does not exist.Do you want to generate it?(yes/no)[yes]:> yes
PHPFatal error:UncaughtErrorException:include(C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer/../nunomaduro/collision/src/Adapters/Laravel/IgnitionSolutionsRepository.php): failed to open stream:No such file or directory inC:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php:478Stack trace:#0C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php(478):Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()#1C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php(478):include()#2C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php(346):Composer\Autoload\includeFile()#3[internal function]:Composer\Autoload\ClassLoader->loadClass()#4C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\nunomaduro\collision\src\Adapters\Laravel\CollisionServiceProviinC:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php on line 478PHPFatal error:UncaughtErrorException:include(C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer/../symfony/error-handler/Error/FatalError.php): failed to open stream:No such file or directory inC:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php:478Stack trace:#0C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php(478):Illuminate\Foundation\Bootstrap\HandleExceptions->handleError()#1C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php(478):include()#2C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php(346):Composer\Autoload\includeFile()#3[internal function]:Composer\Autoload\ClassLoader->loadClass()#4C:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\HandleExceptions.php(143): spl_autoload_ inC:\Users\ASUS\Documents\Platzi\Curso de Introducción a Laravel\routes\vendor\composer\ClassLoader.php on line 478
Básicamente te dice que tu modelo no existe, ¿te aseguraste de crearlo y de que tiene el namespace correcto?
De hecho el modelo no existe, se supone que para eso puse el comando, ¿o entendí mal el video?
Buenas noches en Windows como se debería de ejecutar e comando artisan.. se los agradeceria
¡Hola Platzinauta 👋!
El comando de artisan lo ejecutas desde la consola la consola de tu preferencia, pues este viene en tu proyecto de laravel y con PHP :)
Al querer ver las rutas después del paso de crear el controlador me aparece esto
.
Me podrían ayudar ?
Si no veo mal eso es laravel 8, el controlador de PageController ya no se llama como se muestra en el curso, pues el curso especifica que esta basado en la version 6 de laravel.
Tienes 2 opciones, importas el controllador y luego lo llamas de la siguiente forma:
use App\Http\Controllers\PageController;Route::resource('posts',[PageController::class]);
Cómo se puede apartar parte de la lógica de un controlador que talvez se pueda compartir con otro controlador, es decir esta bien que toda la ligica se encuentre en el controlador?