30-50% off hundreds of digital assets! WordPress themes, video, music and more 30-50% Off Go to Sale
Advertisement
  1. Code
  2. App Development
Code

Cinco joyas ocultas de Laravel

by
Length:MediumLanguages:

Spanish (Español) translation by Joshua Aranda (you can also view the original English article)

Muchos desarrolladores que usan Laravel probablemente sólo arañar la superficie de lo que puede ofrecer este framework. Mientras la documentación solamente cubre los usos más comunes y obvias opciones, sin embargo no cubre todas las cosas. 

No me equivoco, la documentación es muy buena, es sólo que existe mucho que tu puedes hacer, es difícil tener una documentación para todo. Debido a eso, vamos a tomar una   vista rápida a algunas de las joyas ocultas que Laravel ofrece.

Vistas en cascada

Disponible desde: v4.0.0
Documentado: No

Las vistas en cascada son capaces de conectar a los mismos archivos de configuración. Vistas en cascada son muy útiles en el desarrollo de un sistema de tematización extensible. Considera la siguiente estructura de directorios.

La idea es que cuando nosotros return View::make('theme::blog.index'); se buscará primero en el themes/default/views directorio y entonces sino puede encontrar la vista, regresara a app/views.

Para hacer esto nosotros usamos View::addNamespace para registrar nuestros propios namespace con dos localidades.

Colecciones

Disponible desde: v4.0.0
Documentado: Parcialmente

Las colecciones son una gran manera de interactuar y gestionar matrices. Colecciones tienen una variedad de métodos prácticos e implementan una serie de interfaces útiles, tales cómo ArrayableInterface, IteratorAggregate y JsonableInterface.

Digamos que estamos construyendo un pequeño motor de blogging que utiliza archivos planos para el almacenaje. Queremos ser capaces de realizar operaciones, como ordenar, filtrar y paginar.

La implementación del motor de blogging está más allá del alcance de este artículo, pero vamos a imaginar que tenemos una matriz, $articles, y cada miembro de la matriz es una instancia de una clase Article. Todo lo que nosotros necesitamos hacer es conseguir una nuevas instancia de Collection y pasarle nuestra matriz Article.

Clasificación

Usando colección podemos clasificar nuestros Articles. Vamos a ordenar nuestros Articles y mostrar los Articles más recientes primero. Por el bien de este artículo, vamos a imaginar que la cargar de los Articles del sistema es fijo updatedAt, tomando la ultima fecha de modificación del archivo.

El sortBy y sortByDesc son métodos que aceptan un callback, este callback debería devolver un valor que se pueda utilizar para la clasificación de Collection. En nuestro caso, podemos simplemente devolver los artículos con su última modificación y la colección puede clasificar sobre base a ellas.

Filtros

Al igual que en la clasificación, también podemos utilizar la colección para filtrar nuestros artículos tanto con un WHERE clause in MySQL. Vamos a filtrar nuestros artículos basados ​​en una búsqueda que se haya podido ejecutar.

El método filtro actualmente regresa una instancia de Illuminate\Support\Collection así que debemos asignarla a la variable $results. Esta nueva colección contendrá solo los artículos que mencionen “Laravel rocks!” en el cuerpo.

Paginación

Usando colecciones podemos paginar los artículos por lo que no tendremos demasiados artículos que aparezcan en una sola página.

Usando el método slice, extraemos una porción del articulo en la colección y la asignamos a la variable $results

Este ejemplo se podría tomar aún más mediante la creación de una nueva instancia de Laravel en la clase Paginator. De esta manera se puede generar todos los números de pagina y sus enlaces para ti.

Aun hay más!

Podríamos obtener un artículo aleatorio:

También podemos iterar sobre la colección de artículos, como si se tratara de una disposición regular. Todo esto es gracias a la interfaz IteratorAggregate y ArrayIterator.

Y podemos aun transformar los artículos a una matriz regular o a una representación JSON.

Uno de los más estupendos métodos es groupBy, cual permite agrupar los artículos por una especifica llave. Imagina que cada artículo tiene algunos metadatos en la parte superior que se analiza y se extraen del artículos.

Aunque el análisis de estos metadatos está más allá del alcance de este artículo, vamos a suponer que está interpretado y es una propiedad en la instancia de Article. Tu deberías usar groupBy para agrupar todos los artículos por categoría.

Todos los artículos que comparten la misma categoría se agrupan. A continuación, puedes obtener los artículos de una categoría específica.

Collections son una de las mejores joyas ocultas que Laravel ofrece.

Filtros con Expresiones Regulares

Disponible desde: v4.1.19
Documentado: No

Filtrar rutas en Laravel es una tarea común que muchos de nosotros realizamos en todos nuestro proyectos. Un filtro te permite realizar tareas tales como la autenticación de usuario o limitar la velocidad, ya sea antes o después de que una ruta se dispara. Creamos filtros usando Route::filter y se puede aplicar a rutas individuales, un grupo de rutas, o usando Route::when y aplicando un patrón.

En este ejemplo, creamos un filtro restricted el cual espera un único parámetro, $group. Los parámetros $route y $request están siempre declarados antes del filtro.

¿Pero qué sucede si queremos más flexibilidad?. Digamos que queremos aplicar el filtro en todo el admin rutas except para admin/login. Podríamos agrupar las rutas y simplemente mover la ruta en cuestionamiento fuera de el grupo. O bien podríamos usar Route::whenRegex y escribir nuestra propia expresión regular.

Esta expresión regular simplemente se asegura de que sólo se aplique a las rutas que inician con admin y no este seguido por /login, pero puede estar seguido por cualquier otro. Excelente. Ahora tenemos el filtro restricted:admin aplicado a todas las rutas, excepto a la ruta admin/login.

Mensajes

Disponible desde: v4.0.0
Documentado: Parcialmente

Sin duda has usado Illuminate\Support\MessageBag desde hace un tiempo sin darte cuenta. El más grande role que juega MessageBag es contener todas tus errores de validación cuando haz construido un Laravel validator.

Un $errors en la variable esta disponible en cada vista que contendrá una instancia vacía de MessageBag o la instancia que tu retornas a sesión con Redirect::to('/')->withErrors($validator);

Hay una buena probabilidad de que mucho de lo que estas haciendo en un formulario es mostrar un mensaje de error por debajo de un campo determinado.

Puedes remover la sentencia if enteramente y usar el segundo parámetro del método first para envolver el mensaje en div.


Muy pero muy bueno!

Fluidez

Disponible desde: v3.0.0
Documentado: Parcialmente

La clase Fluent ha existido por mucho tiempo y se utiliza realmente en el framework propio al crear las migraciones con el schema builder. Entre Laravel 3 y 4 Laravel la clase apenas ha cambiado, las únicas grandes diferencias esta en algunas interfaces de más.

Al usar la clase Fluent todo lo que se necesita es instanciar y de ahí hacia adelante.

La instancia ahora tiene 3 atributos definidos, name con el valor de Jason, country con el valor de Australia, y subscriber con un valor booleano true.

Antes de Laravel 4.1 sólo se podía realmente conseguir los atributos desde una instancia. Desde Laravel 4.1 tu puedes usar los métodos toArray y toJson para obtener el arreglo de atributos y la representación JSON respectivamente. 

En Laravel 4.2, la clase también implementa la interfaz JsonSerializable lo que significa que puedes pasar la instancia directamente a json_encode.

No es todo, aun hay más!

Hemos visto algunas útiles joyas de Laravel framework. Pero, como has adivinado, hay aun más en este maravilloso framework. 

La mejor manera de averiguar qué más Laravel tiene para ofrecer es excavar en el código fuente. No es tan difícil como se podría pensar y aprenderás mucho sobre el framework en el que se está construyendo.

Si tienes alguna joya adicional que hayas encontrado y te guste, no dudes en compartirlo en un comentario!

¡Sé el primero en conocer las nuevas traducciones–sigue @tutsplus_es en Twitter!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.