Cinco gemas ocultas de Laravel

Muchos desarrolladores que usan Laravel probablemente apenas están rascando la superficie de lo que ofrece el marco. Si bien la documentación cubre los casos de uso más comunes y las características obvias, no cubre todo. 

No me malinterpretes, la documentación está bien, es solo que hay tantas cosas que puedes hacer que es difícil documentar. todo. Por eso, vamos a echar un vistazo a algunas de las gemas ocultas que se esconden dentro de Laravel.

Vistas en cascada

Disponible desde v4.0.0
Documentado No

Las vistas pueden conectarse en cascada de manera muy similar a los archivos de configuración. Las vistas en cascada son extremadamente útiles cuando se desarrolla un sistema de temática extensible. Considere la siguiente estructura de directorios.

/ app / views / blog /index.blade.php / themes / default / views / blog /index.blade.php /theme.blade.php

La idea es que cuando nosotros volver View :: make ('theme :: blog.index'); primero mirará en el temas / por defecto / vistas directorio y luego, si no puede encontrar la vista, retroceda a aplicación / vistas.

Para ello utilizamos Ver :: addNamespace para registrar nuestro propio espacio de nombres con las dos ubicaciones.

View :: addNamespace ('theme', [base_path (). '/ Themes / default / views', app_path (). '/ Views']);

Colecciones

Disponible desde v4.0.0
Documentado Parcialmente

Las colecciones son una excelente manera de interactuar y administrar matrices. Las colecciones tienen una variedad de métodos prácticos e implementan una serie de interfaces útiles, como ArrayableInterface, IteratorAggregate, y JsonableInterface.

Digamos que estamos construyendo un pequeño motor de blogs que usa archivos planos para el almacenamiento. Queremos poder realizar operaciones como la clasificación, el filtrado y la paginación..

Implementar el motor de blogs está más allá del alcance de este artículo, pero imaginemos que tenemos una matriz, $ artículos, y cada miembro de la matriz es una instancia de una Artículo clase. Todo lo que necesitamos hacer es obtener una nueva instancia de Colección Y dale nuestra gama de artículos..

$ articles = new Illuminate \ Support \ Collection ($ arrayOfArticles);

Clasificación

Usando la colección podemos ordenar nuestros artículos. Vamos a ordenar nuestros artículos y mostrar los últimos artículos actualizados recientemente. Por el bien de este artículo, imaginemos que al cargar los artículos desde el sistema de archivos configuramos updatedAt Propiedad a la última hora modificada del archivo..

$ articles-> sortByDesc (function ($ article) return $ article-> updatedAt;);

los ordenar por y sortByDesc los métodos aceptan una devolución de llamada, esta devolución de llamada debe devolver un valor que se puede utilizar para ordenar la colección. En nuestro caso, simplemente podemos devolver los artículos que se modificaron por última vez y la colección se puede clasificar según ese.

Filtración

Al igual que en la clasificación, también podemos usar la colección para filtrar nuestros artículos de manera muy similar a una DÓNDE cláusula en MySQL. Filtremos nuestros artículos en función de una búsqueda que se haya ejecutado..

filtro (función ($ artículo) use ($ searchQuery) return preg_match (sprintf ('/% s / m', $ searchQuery), $ artículo-> cuerpo););

los filtrar método en realidad devuelve una nueva instancia de Illuminate \ Support \ Collection así que tenemos que asignarlo a la $ resultados variable. Esta nueva colección contendrá solo los artículos que mencionaron “¡Laravel rocks!” En el cuerpo.

Paginación

Usando la colección podemos paginar nuestros artículos para que no aparezcan demasiados artículos en una sola página..

$ perPage = 1; $ page = Input :: get ('page', 1); if ($ page> ($ articles-> count () / $ perPage)) $ page = 1;  $ pageOffset = ($ page * $ perPage) - $ perPage; $ results = $ articles-> slice ($ pageOffset, $ perPage);

Utilizando la rebanada método, extraemos una parte de los artículos de la colección y la asignamos a la $ resultados variable. 

Este ejemplo podría ser llevado aún más lejos creando una nueva instancia de Laravel Paginador clase. De esa manera puede generar todos los números de página y enlaces para usted..

Hay más!

Podríamos obtener un artículo al azar:

$ artículo = $ artículos-> aleatorio ();

También podemos iterar sobre nuestra colección de artículos como si fuera una matriz regular. Todo esto es gracias a la IteratorAggregate y ArrayIterator interfaces.

foreach ($ articles as $ article) echo $ article-> body; 

E incluso podemos transformar nuestros artículos en una matriz regular o en su representación JSON..

$ array = $ articles-> toArray (); $ json = $ articles-> toJson ();

Uno de los métodos más geniales es probablemente agrupar por, Lo que nos permite agrupar artículos por una clave específica. Imagine que cada artículo tenía algunos metadatos en la parte superior, que se analizaron y eliminaron del cuerpo del artículo..

Aunque el análisis de estos metadatos está fuera del alcance de este artículo, supondremos que se analiza y es una propiedad en el Artículo ejemplo. Entonces podrías usar agrupar por Para agrupar los artículos por la categoría en la que fueron publicados..

$ resultados = $ artículos-> grupoBy ('categoría'); 

Todos los artículos que compartan la misma categoría serán agrupados. A continuación, puede obtener los artículos para una categoría específica.

foreach ($ resultados-> obtener ('tutorial') como $ artículo) echo $ artículo-> cuerpo; 

Las colecciones son una de las mejores joyas ocultas que Laravel tiene para ofrecer..

Filtros de expresiones regulares

Disponible desde v4.1.19
Documentado No

Filtrar rutas en Laravel es una tarea común que muchos de nosotros hacemos en todos nuestros proyectos. Un filtro le permite realizar tareas como la autenticación del usuario o la limitación de velocidad, ya sea antes o después de disparar una ruta. Creamos filtros utilizando Ruta :: filtro y puede aplicarlos a rutas individuales, a un grupo de rutas o al usar Ruta :: cuando y aplicando a un patrón emparejado.

Ruta :: filtro ('restringido', función ($ ruta, $ solicitud, $ grupo) // Restringir el acceso de los usuarios según el valor de $ grupo); Ruta :: cuando ('admin / *', 'restringido: admin'); 

En este ejemplo, creamos un restringido Filtro que espera un solo parámetro., $ grupo. los $ ruta y $ solicitud Los parámetros siempre se dan a un filtro anterior..

Pero ¿y si quisiéramos más flexibilidad? Digamos que queríamos aplicar el filtro a todos los administración rutas excepto para admin / login. Podríamos usar un grupo de rutas y simplemente mover la ruta en cuestión fuera del grupo. O podríamos usar Ruta :: whenRegex y escribe nuestra propia expresión regular.

Ruta :: whenRegex ('/ ^ admin (\ / (?! login) \ S +)? $ /', 'Restringido: admin');

Esta expresión regular simplemente se asegura de que solo se aplique a las rutas que comienzan con administración y no son seguidos por /iniciar sesión, pero puede ser seguido por cualquier otra cosa. Excelente. Ahora tenemos nuestro restringido: admin Filtro aplicado a todas las rutas excepto nuestra. admin / login ruta.

La bolsa de mensajes

Disponible desde v4.0.0
Documentado Parcialmente

Sin duda has estado usando Illuminate \ Support \ MessageBag Desde hace un tiempo sin siquiera darme cuenta. El mayor papel MessageBag plays contiene todos sus errores de validación al usar el validador integrado de Laravel.

Un $ errores La variable está disponible en cada vista que contendrá un vacío MessageBag instancia o la instancia que flasheado a la sesión con Redirect :: to ('/') -> withErrors ($ validator);

Hay una buena posibilidad de que muchos de ustedes estén haciendo algo como esto en sus formularios al mostrar un mensaje de error debajo de una entrada en particular.

Form :: text ('username', null) @if ($ errors-> has ('username')) 
$ errores-> primero ('nombre de usuario')>
; @terminara si

Puedes quitar eso Si declaración en su totalidad y utilizar el segundo parámetro de la primero método para envolver el mensaje en el div.


 Form :: text ('nombre de usuario', nulo) $ errores-> primero ('nombre de usuario', '
:mensaje
')

Mucho, mucho, mucho mejor!

Fluido

Disponible desde v3.0.0
Documentado Parcialmente

los Fluido La clase ha existido durante mucho tiempo y, de hecho, se utiliza dentro del propio marco cuando se crean migraciones con el generador de esquemas. Entre Laravel 3 y Laravel 4, la clase en sí apenas ha cambiado, las únicas grandes diferencias son algunas interfaces más..

Usar el Fluido clase todo lo que necesita hacer es obtener una instancia y listo.

$ usuario = nuevo Illuminate \ Support \ Fluent; $ usuario-> nombre ('Jason') -> país ('Australia') -> suscriptor ();

La instancia ahora tiene 3 atributos definidos., nombre con un valor de Jason, país con un valor de Australia, y abonado con un booleano cierto valor.

Antes de Laravel 4.1, solo podía establecer y obtener los atributos de la instancia. Desde Laravel 4.1 puedes usar el toArray y aJson Métodos para obtener la matriz de atributos y su representación JSON respectivamente.. 

A partir de Laravel 4.2, la clase también implementa el Jsonserializable interfaz lo que significa que puede pasar la instancia directamente en json_encode.

Hay aun mas!

Hemos visto varias gemas útiles del marco de Laravel. Pero, como has adivinado, hay aún más en el marco. 

La mejor manera de averiguar qué más puede ofrecer Laravel es profundizar en la fuente. No es tan aterrador como pensaría y aprenderá mucho sobre el marco en el que está construyendo.

Si tienes gemas adicionales que has encontrado, no dudes en compartirlas en los comentarios.!