Rutas y Controladores en Laravel: Fundamentos Esenciales
Todos los cursos GRATIS
Se acaba en:
:::
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
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
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:
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:
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
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.
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
¡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 :)
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?