Laravel: Rutas (parte 2)
Archivos que vamos a investigar en esta lección
- routes/web.php
Con Laravel no vamos a crear un archivo php por cada página de nuestra web, sino que vamos a usar el FrontController, el patrón en el que se basa Laravel.
Tendremos sólo un archivo de entrada en nuestra aplicación, el index.php. Los archivos a los que el usuario puede acceder están en la carpeta public. Esto se hace por motivos de seguridad, para que no pueda acceder a otros más sensibles.
Laravel sabe qué información debe mostrar cuando un usuario escribe una URL. El archivo que se encarga de administrar las rutas está en la carpeta routes y se llama web.php.
Vemos el contenido de este archivo: aquí Laravel devuelve la vista welcome cuando el usuario pide la ruta principal, que sería localhost/blog/public, por eso en el primer parámetro de gert se indica simplemente un slash:
Route::get('/', function () {
return view('welcome');
});
Si cambiamos el fragmento anterior por el que sigue, obtendremos sólo la frase al visitar la URL:
Route::get('/', function () {
/*return view('welcome');*/
return "Bienvenido a mi proyecto de Laravel";
});
Si añadimos un fragmento como el que sigue, estaremos añadiendo una ruta para la URL «cursos» que mostrará el contenido «Bienvenido a la página de cursos». Usamos de nuevo Route::get() con parámetros personalizados. Para ver este contenido, accederemos a la ruta localhost/blog/public/cursos:
Route::get('cursos', function () {
return "Bienvenido a la página de cursos";
});
Dejamos esta ruta también para utilizarla en la lección siguiente:
Route::get('cursos/create', function () {
return "Inserción de formulario";
});
Introduzcamos variables para «subrutas»: basta con utilizar de nuevo Route::get() añadiendo una variable la la función (nótese que en el primer parámetro de get la variable se encuentra entre corchetes):
Route::get('cursos/{curso}', function ($curso) {
return "Url con la variable $curso";
});
Para probar esta nueva función, visitemos las siguientes direcciones:
- http://localhost/blog/public/cursos/personalizada
- http://localhost/blog/public/cursos/variable
- http://localhost/blog/public/cursos/con una variable
- http://localhost/blog/public/cursos/que me apetece
En este punto deberíamos instalar Laravel Snippets, la extensión de Visual Studio Code para hacer esta tarea repetitiva más rápidamente (se indica aproximadamente en el minuto 8 del vídeo).
Prestemos atención un momento a este fragmento para crear una ruta, donde vamos a pasar más de una variable para una ruta:
Route::get('nuevaruta/{subruta}/{otrasubruta}', function($subruta, $otrasubruta) {
return "Estamos en la ruta $subruta y en la subruta $otrasubruta";
});
Los dos últimos fragmentos de código son bastante parecidos. Nuestro código podría interpretar la «otrasubruta» como una variable opcional, y así lo vamos a expresar:
Route::get('nuevaruta/{subruta}/{otrasubruta?}', function($subruta, $otrasubruta = null) {
if ($otrasubruta) {
return "Estamos en la ruta $subruta y en la subruta $otrasubruta";
}
else {
return "Estamos en la ruta $subruta";
}
});
- Una de las dos variables de get tiene un signo de interrogación al final, indicando que la variable es opcional: la variable $otrasubruta.
- Ésta ha sido inicializada en la función con valor null
- Luego, hemos escrito un condicional que comprueba si la variable ha sido o no inicializada, y muestra un mensaje distinto según cada caso.
De esta forma podemos acceder a localhost/blog/public/nuevaruta/algo y también a localhost/blog/public/nuevaruta/algo/otracosa. O también, por ejemplo, a localhost/blog/public/nuevaruta/categoria y también a localhost/blog/public/nuevaruta/categoria/subcategoria.
Este condicional debería estar en un controlador, ya que este fragmento pertenece a la lógica de nuestra aplicación. Lo veremos en la siguiente lección.
Recursos
Enlace de Youtube: https://www.youtube.com/watch?v=PDbOsGlCf7o&list=PLZ2ovOgdI-kWWS9aq8mfUDkJRfYib-SvF&index=3
Enlace sobre la arquitectura de Laravel: https://www.oulub.com/es-ES/Laravel/structure#introduction