Los filtros son realmente un recurso fantástico para usar en Laravel. De hecho, casi todas las aplicaciones los utilizarán de una forma u otra. Los filtros le brindan la capacidad de aprovechar el ciclo de vida del enrutamiento dentro de Laravel y tomar acciones basadas en diversas condiciones antes y después de la solicitud y respuesta de la ruta. También vimos en el último episodio sobre las técnicas de Larvael Cache, que podemos combinar el uso de filtros y el almacenamiento en caché juntos. Hay muchas cosas útiles que podemos hacer con los filtros en Laravel, ¡así que vayamos directo a ello!


Restricción del acceso a una ruta

Los filtros de ruta son un excelente método para limitar el acceso a una ruta determinada. Esta es una característica importante que debe tener cuando hay áreas del sitio web a las que solo deben acceder los usuarios autorizados. Es probable que su aplicación web o sitio web tenga un área de administración. Una forma de mantener a los usuarios no calificados alejados de esa ruta es utilizar un filtro. Entonces, suponga que tiene su información altamente secreta y altamente clasificada en esta área de administración y tiene un archivo de ruta como este:

En este momento, cualquiera puede ver esta página como puede ver aquí.

filtro de autenticación laravel

Filtros Laravel integrados

Filtro de autenticación de Laravel

¡El filtro de autenticación viene a tu rescate! Laravel se envía con algunos filtros ya integrados para que los utilice en sus aplicaciones. El filtro de autenticación es uno de ellos y nos ayudará en este tipo de aplicaciones. Podemos actualizar nuestra ruta al área de administración para incluir un filtro de autenticación como este:

En este fragmento de arriba, hacemos un par de cosas. Observe que agregamos el before()filtro a la ruta de administración. Además, agregamos una segunda ruta al archivo de loginEsto es así para no lanzar una excepción una vez que nuestro filtro de autenticación se activa para redirigir a los usuarios no autorizados a la página de inicio de sesión. En cierto modo, casi se lee al revés, como en "Antes de mostrarte esta área de administración, ejecutaré el filtro de autenticación para ver si debo hacer esto o no". Ahora que actualizamos nuestra ruta de administración para incluir un filtro de autenticación, compruebe lo que sucede cuando intentamos visitar esa área del sitio web:

laravel auth filter login

¡Agradable! Entonces, ¿cómo funcionó esta magia? Bueno, como dijimos anteriormente, Laravel se envía con algunos filtros ya configurados para ti enapp/filters.phpEchemos un vistazo al código que nos proporciona esta funcionalidad:

Lo que este código hace por usted es simplemente verificar si el usuario está autorizado y enviarlo en su camino si no lo está. Podemos ver que también tiene soporte para ajax, que es bastante hábil. En nuestro archivo de rutas, hicimos referencia al filtro con el nombre de 'auth' y podemos ver aquí cómo definir ese mismo filtro usando Route::filter()El Redirect::guest()método tiene la ventaja adicional de que una vez que el usuario * está * conectado, se le enviará a la página que tenía la intención de visitar a través de redirecciones previstas.

Presentador de ataques de falsificación de solicitudes entre sitios

La instalación predeterminada de Laravel también tiene un filtro para hacer frente a los ataques CSRF. Los ataques CSRF pueden hacer que un usuario envíe solicitudes HTTP sin saberlo a varios sitios web para realizar acciones que el usuario no tiene idea de que están sucediendo. En su forma más benigna, al usuario le puede gustar una página de Facebook sin realmente darse cuenta. En el otro extremo del espectro estaría la transferencia de dinero desde una cuenta en línea sin conocimiento de que esté sucediendo. Por lo tanto, es importante asegurarse de utilizar el filtro CSRF. Su código se ve así:

La aplicación de un filtro csrf es para rutas que van a procesar datos de formularios y lo llamaría usando before () . Esta es la razón por la que el método Laravel Form :: open () genera un token de seguridad para usted. Ese token de seguridad se usa con este filtro para eliminar cualquier posible problema de csrf para el usuario mediante el patrón de token de sincronizador.

Filtros de aplicaciones globales

En la parte superior del archivo filter.php , verá el siguiente código:

Estos son los filtros globales, lo que significa que puede configurar la lógica dentro de cada uno de ellos para que se ejecute en cada solicitud de la aplicación. Ya no estarán vinculados a rutas o controladores específicos. Puede encontrar algunos ejemplos de cómo usarlos en la documentación o en sitios como Laravel Recipes, Laravel Tricks, etc.

Filtros de apilamiento en Laravel

Puede apilar filtros si lo desea, lo que significa que puede combinar varios filtros de una sola vez. En primer lugar, veamos una forma diferente de escribir el mismo filtro con el que comenzamos. Parece que la gente aplica sus filtros utilizando una matriz en la ruta como segundo argumento. Los documentos oficiales también lo muestran de esta manera, por lo que deberíamos echarle un vistazo:

Frio. Entonces, este enfoque funciona igual, es solo una sintaxis diferente. Ahora que sabemos cómo utilizar esta sintaxis, también podemos utilizar filtros de apilamiento. Ahora vamos a crear los filtros más absurdos que hayas visto aquí. Serán útiles para casi nada, excepto para mostrarnos cómo se activan y apilan los filtros. Te di una advertencia justa, no pongas esto en tu código, ¡pero siéntete libre de probarlo para divertirte y ver cómo se activan los filtros!

Definición de sus propios filtros personalizados

Tres nuevos filtros

En nuestro app/filters.phppodemos agregar este código:

Como puede ver, estos filtros no están haciendo nada útil, ¡pero prometo que nos ayudarán a comprender cómo podemos adjuntarlos a las rutas! Ahora compruebe cómo los apilamos en nuestro routes.phpseparando los nombres de los filtros con una tubería.

Ahora aquí está el socio del trato. Ya no usamos el filtro de autenticación y, en su lugar, llamaremos a estos tres filtros en sucesión antes de la ruta de administración. Ahora cualquiera podrá ingresar a nuestro reino administrativo y verá algunos mensajes para confirmar que los filtros también se dispararon en el camino. Visite la ruta de administración y verifíquela:

filtros de apilamiento laravel

¡Oh si! BabaBooey! Verá, hemos llegado al área de administración y puede ver que nuestros filtros se activaron correctamente.

Pasar parámetros a filtros

Vamos a matar dos pájaros de un tiro ahora mismo. Primero, veamos un código actualizado en nuestro archivo de rutas. Vamos a cambiar la forma en que aplicamos nuestros filtros. Dos cosas a tener en cuenta son el hecho de que ahora estamos usando el encadenamiento de métodos y también cambiamos one:booeyone:potato:

Ave 1.

Verá, me está molestando que hayamos cambiado nuestra sintaxis sobre cómo aplicamos el filtro del encadenamiento a una matriz como segundo argumento de la ruta. Volveremos a encadenar aquí como puede ver. El objetivo es probar el método de separación de tuberías de aplicar filtros usando la cadena para ver si también funciona a través de este método.

Pájaro 2.

El segundo pájaro en nuestro radar es el hecho de que hay un parámetro involucrado con el filtro uno. Ahora, tenga en cuenta que si desea pasar un argumento al cierre en un filtro, ¡es el tercer parámetro que debe pasarse! Descubrí esto yo mismo, ya que mi aplicación seguía vomitando cuando pasaba un parámetro al filtro y no podía entender por qué. Entonces, es por eso que ve tanto la ruta , la solicitud y nuestro parámetro personalizado en la tercera posición así:

Ok, todo está en su lugar, probémoslo:

parámetro de filtro laravel

¡Excelente! Hay algunas cosas que observar aquí. En primer lugar, parece que estos filtros funcionan igual de bien para apilar, ya sea que estemos usando la matriz como la sintaxis del segundo parámetro o la sintaxis de encadenamiento de métodos. Además, observe que solo se activaron el mensaje del filtro dos y del filtro tres. ¿Por qué es esto? Esto se debe a que cuando cambiamosone:booeyaone:potatoen nuestro archivo de rutas, el filtroonenotó dentro de suifcláusula que$babaya no era igual abooey, era igual apotatoPor lo tanto, elonemensaje defiltrono se activó.


Otras formas de asignar filtros

Hay formas adicionales en las que podemos asignar filtros a las rutas. Por supuesto, podríamos usar la opción global, pero a veces puede ser demasiado. Por otro lado, es posible que no queramos tener que adjuntar un filtro a muchas rutas diferentes. Hay dos formas de evitar esto. Uno es Filtros de grupo y el otro es Filtros de patrón.

Filtros de grupo

Estos son realmente hábiles. Básicamente, simplemente envuelve todas las rutas a las que deseas que se les asigne un filtro y listo, listo. La sintaxis se ve así:

Entonces, aquí, lo que hacemos es tomar las mismas rutas con las que hemos estado trabajando hasta ahora y simplemente envolverlas dentro de un grupo de rutas con el filtro aplicado. Ahora, cuando visitemos estas rutas, se activarán nuestros tres filtros. Visitemos la ruta de inicio de sesión solo para estar seguros:
filtros de grupo de rutas laravel

Excelente, podemos ver que, sí, la ruta de inicio de sesión se carga bien y vemos en la parte superior de la página que los tres filtros se activaron antes de la solicitud. Hay todo tipo de formas de definir y aplicar filtros, solo eche un vistazo a los documentos para ver la lista completa.

Definir filtros en una clase

En este tutorial, todos los filtros se han configurado en app/filters.phpTambién puede crear su propia clase para manejar esto. Recuerde que en el tutorial de caché de laravel creamos nuestra propia clase, la registramos con el contenedor de IoC en el archivo filter.php , luego usamos psr-4 para autocargar la clase por nosotros. De cualquier manera funciona, y de hecho, esto me recuerda una de las características de Laravel. Esto es que con casi todos los aspectos del marco, hay varias formas de lograr el mismo objetivo final. Por esta razón, tendrá que patear los neumáticos, por así decirlo, durante algún tiempo antes de encontrar los enfoques que mejor se adapten a sus necesidades.

Usar filtros con controladores

Lo más probable es que su aplicación utilice controladores. Hasta ahora no hemos visto cómo asignar filtros a los controladores en Laravel. En realidad, es más o menos el mismo enfoque, por lo que una vez que comprenda el concepto de asignar filtros a través de su archivo route.php, es una tarea fácil traducir esas habilidades para aplicar estos mismos filtros a los controladores. También puede incrustar la lógica del filtro directamente en su controlador. De nuevo, ¡muy flexible! Deberá experimentar con los distintos enfoques para ver cuál le gusta más. Para mayor claridad, así es como lo haría:

Conclusión de los filtros de Laravel

La conclusión con los filtros es que le permiten empaquetar muy bien las reglas para acceder a las rutas, el manejo de la lógica anterior a la solicitud, así como la lógica posterior a la solicitud en fragmentos de código manejables. De esa manera, puede mantener mejor las cosas SECAS, haciendo uso de sus diversos filtros en diferentes lugares de la aplicación. Casi todas las aplicaciones necesitarán filtros, por lo que debemos estar familiarizados con ellos. Después de leer este episodio, diríjase a los documentos oficiales y pruebe todos los ejemplos en su propia caja de arena para acostumbrarse a usarlos.