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.
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']);
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);
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.
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.
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..
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..
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.
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íoMessageBag
instancia o la instancia que flasheado a la sesión conRedirect :: 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!
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
.
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.!