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