17. Cómo proteger rutas con expresiones regulares

En este capítulo, aprenderás cómo proteger rutas en Laravel 10 utilizando expresiones regulares. Las expresiones regulares son patrones que se utilizan para validar y filtrar datos. Te enseñaremos cómo utilizar expresiones regulares para restringir el acceso a ciertas rutas y mejorar la seguridad de tu aplicación Laravel.


7 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    En Laravel, puede restringir el formato de los parámetros de ruta utilizando el método where() en una instancia de ruta. Este método acepta el nombre del parámetro y una expresión regular que define cómo se debe restringir el parámetro. Por ejemplo:

    Route::get('/user/{name}', function (string $name) {
       // ...
    })->where('name', '[A-Za-z]+');
    Route::get('/user/{id}', function (string $id) {
       // ...
    })->where('id', '[0-9]+');
    Route::get('/user/{id}/{name}', function (string $id, string $name) {
       // ...
    })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);


    Además, hay métodos auxiliares que le permiten agregar rápidamente restricciones de patrones a sus rutas. Algunos de los métodos auxiliares comunes son:

    Route::get('/user/{id}/{name}', function (string $id, string $name) {
       // ...
    })->whereNumber('id')->whereAlpha('name');
    Route::get('/user/{name}', function (string $name) {
       // ...
    })->whereAlphaNumeric('name');
    Route::get('/user/{id}', function (string $id) {
       // ...
    })->whereUuid('id');
    Route::get('/user/{id}', function (string $id) {
       //
    })->whereUlid('id');
    Route::get('/category/{category}', function (string $category) {
       // ...
    })->whereIn('category', ['movie', 'song', 'painting']);

    Si la solicitud entrante no coincide con las restricciones del patrón de ruta, se devolverá una respuesta HTTP 404.

    Si desea que un parámetro de ruta siempre esté restringido por una expresión regular dada, puede usar el método pattern(). Puede definir estos patrones en el método boot() de tu App\Providers\RouteServiceProvider clase. Por ejemplo:

    /**
    * Define your route model bindings, pattern filters, etc.
    */
    public function boot(): void
    {
       Route::pattern('id', '[0-9]+');
    }
    Una vez que se ha definido el patrón, se aplica automáticamente a todas las rutas que usan ese nombre de parámetro. Por ejemplo:
    Route::get('/user/{id}', function (string $id) {
       // Only executed if {id} is numeric...
    });
  • Inescop

    Inescop hace 3 semanas

    No existe el archivo RouteServiceProvider, y pongo 
    Route::pattern('id', '[0-9]+');

    en el archivo AppServiceProvider y me da un error:

    Method Illuminate\Routing\Route::pattern does not exist.


     

    • Jhan Carlos Garcia Cordova hace 3 semanas

      En versiones actuales de laravel, ya no trae “RouteServiceProvider”, para ese caso debes hacerlo en “AppServiceProvider.php” dentro de la “function boot()”.
      así quedaría:
      public function boot(): void

      Route::pattern('id', '[0-9]+');
      }

      Y luego declaras :
      use Illuminate\Support\Facades\Route;

      con eso lo tienes solucionado.

    • Inescop hace 3 semanas

      Gracias!

  • Diego Loja

    Diego Loja hace 2 meses

    Hola que tal, no me aparece el archivo de RouteServicerovider, me podrías ayudar con ello. Gracias por tu tiempo. Buen curso :D

  • Luis Felipe Vasquez Yepez

    Luis Felipe Vasquez Yepez hace 3 meses

    Hola que tal? en la parte de la carpeta providers no me sale ese archivo php. solamente uno que dice “AppServiceProvider.php” a que se debera?

    • Victor Arana Flores hace 2 meses

      Hola Luis, en Laravel 11 para hacer lo que hice tienes que hacerlo en el archivo APPServiceProvider.

      En los proximos días estaré actualizando aquellas cosas que han cambiado, un poco de paciencia por favor :D

    • Miguel Duarte Porras hace 2 meses

      Hola buenas tardes, si también quedé así x_x cuando no vi el archivo, entonces será esperar, muchas gracias, espero no se demore :)

  • Marcos Romero

    Marcos Romero hace 1 año

    Tu curso esta genial hermano, solo una pequeña observación para los próximos curso que saque, trate de poner un poco de zoom para que se pueda ver mas claramente algo de código, de ahi todo genial, gracias por el curso y apoyo.

    • Victor Arana Flores hace 1 año

      Hola Marcos, claro que si. Y de hecho voy a regrabar la primera parte de este curso.

      Normalmente grababa mis cursos en mi laptop, con una pantalla pequeña, por lo cual cuando las personas veían el curso solian ver el codigo grande. Para este curso empece a grabarlo desde mi computadora, con una pantalla muchisimo más grande, y el codigo se veía pequeño (aun cuando tiene zoom) ahora cuando grabo si le pongo mas zoom aun, y ya se ve bien desde cualquier dispositivo.

       

  • Victor Roman Ortiz Abreu

    Victor Roman Ortiz Abreu hace 1 año

    hay que reconocer que has mejorado mucho desde que pusiste este mismo curso free hasta el momento, ya tiene un lenguaje mas formal en la logica de programacion, Felicidades!!!

  • Victor Roman Ortiz Abreu

    Victor Roman Ortiz Abreu hace 1 año

    hola, serias tan amable de cuando explique la teoria, pudieses bajar el mouse dos lineas para que pueda verse bien lo que usted explica, en el caso de [A-Za-z] tapa un poco y es molesto tener que repertir el fragmento del video por ese detalle, le agradesco mucho su apoyo y atención.

    • Victor Arana Flores hace 1 año

      Hola Victor, claro. Trataré de corregir esos detalles.