Parámetros - Rutas en Laravel

Cuando trabajamos con las rutas en sistemas avanzados necesitamos siempre trabajar con parámetros y tener pleno control sobre ellos, un parámetro es una variable que, incluida en una ruta, modifica o altera el resultado.

A veces necesitamos capturar segmentos de la ruta, crear filtros a partir de ella, validar que sean números o letras, etc. Vamos paso a paso hasta conocer en su totalidad estas funciones.

Por ejemplo, capturemos el ID de un producto: Este ejemplo es aplicable a cualquier módulo y ejemplo.

    Route::get('producto/{id}', function ($id) {
        return 'El producto tiene el ID ' . $id;
    });

En este ejemplo luego de obtener el ID podríamos consultar los datos completos del producto aplicando la lógica correspondiente.

Podemos definir tantos parámetros necesitemos, miremos este ejemplo:

    Route::get('producto/{product}/pregunta/{question}', function ($product_id, $question_id) {
        //
    });

Un parámetro siempre estará entre llaves {product}, en este caso el parámetro se llama product. Algo importante es que solo deben ir caracteres alfabéticos, y no pueden contener un guión, en todo caso podrías utilizar un guión bajo o underscore product_id.

Parámetros opcionales

De vez en cuando necesitamos especificar un parámetro de forma opcional. Lo hacemos colocando un signo de interrogación cerrando ? después del nombre del parámetro, como order?. Cuando lo hagas no olvides colocar un valor predeterminado, miremos este ejemplo:

    Route::get ('productos/{order?}', function ($order = null) {
        return $order;
    });

La ruta sería por ejemplo https://rimorsoft.com/productos o https://rimorsoft.com/productos/asc indicando de forma opcional que puede pasarse el orden.

De esta manera podríamos según el ejemplo, determinar un orden de forma opcional. Está demás decir que debes implementar la lógica para ello, en otras palabras, aquí solo hablamos de los parámetros en las rutas.

Where en las rutas

Limitaciones en las rutas con expresiones regulares

Es interesante proteger de alguna manera la aplicación desde las rutas restringiendo el formato de los parámetros usando where es mágico. Este método acepta el nombre del parámetro y en segundo lugar la expresión regular, veamos un ejemplo:

    Route::get(‘profile/{username}', function ($username) {
        //
    })->where(username, '[A-Za-z]+');

Aquí básicamente decimos que el parámetro username solo debe contener letras...

    Route::get('product/{id}', function ($id) {
       //
    })->where('id', '[0-9]+');

En este caso, aprecia cómo permitimos solo números

Tambíen se pueden evaluar mas de un parámetro... where(['id' => '[0-9]+', 'name' => '[a-z]+']); //Aquí evaluamos dos parámetros

Restricción global

Para evaluar todos los ID pasados por URL en nuestro sistema podemos hacer lo siguiente… Ir al service provider RouteServiceProvider y agregar la expresión Route::pattern ('id', '[0-9] +'); en el método boot()

    Public function boot ()
    {
        Route :: pattern ('id', '[0-9] +'); // justo aquí

        Parent :: boot ();
    }

Una vez que se ha definido el patrón, se aplica automáticamente a todas las rutas utilizando ese nombre de parámetro, es decir en toda ruta que incluya un ID:

    Route::get('producto/{id}', function ($id) {
        return 'El producto tiene el ID ' . $id;
    });

¡Interesante!, saber cada cosa de Laravel te ayuda a proporcionar capas de seguridad, rapidez y profesionalismo… Esto código es tan básico que no se le toma tan en serio, espero que tu si lo hagas :)


Toma notas: Un breve registro escrito, código o notas de algo para ayudarte a recordar en el futuro. escribe pensando en eso, toma notas y aporta código a otros.

Etiquetas:

route laravel