Tiempo de volver a redescubrir PHP.
Laravel es un framework que está en boca de muchos, desde BCNBIT queremos explicar para los no iniciados las bases de este framework y su funcionamiento. Vamos a crear varias entradas para ir explicando poco a poco las características y modo de hacer de este framework.
Durante varios años PHP se ha ganado una mala reputación entre los desarrolladores que tuvieron que mantener aplicaciones desarrolladas sin ningún tipo de estructuración. Como consecuencia de esto muchos desarrolladores tomaron el camino de Ruby o Python.
Una base HTTP más robusta
Pasó el tiempo y apareció el proyecto Symfony, el cual está basado en los principios de crear un desarrollo más sólido flexible y testeable, algo que las aplicaciones PHP no tenían.
Laravel nace confiando en Symfony, pero también depende de otras grandes librerías como SwiftMailer, Carbon o Doctrine, es decir, se ha tomado la mejor de los grandes para hacer un framework muy robusto.
De vuelta a PHP
Laravel requiere una versión relativamente reciente de PHP, recomendamos la versión 5.4.
- Espacios de nombres (namespaces): se utilizan extensivamente lenguajes como Java o C# y evitan la colisión de nombres cuando el mismo nombre de función se utiliza en diferentes librerías. Los espacios de nombres se separan mediante “\”, y éstos se deben replicar en la estructura del directorio. Se declaran en la parte superior del archivo tomando una estructura como <?php namespace Illuminate\Database\Eloquent. Para indicar los espacios de nombres en los que PHP deberá buscar las clases, utilizamos la palabra “use” seguida del espacio de nombre de la clase, por ejemplo: use Illuminate\Database\Eloquent\Model;
- Interfaces (interfaces): también se conocen como Contratos y son una forma de definir los métodos que una clase deberá proveer, si lo implementa esa interficie. Las Interfaces no contiene ningún detalle de implementación, únicamente son contratos. Así por ejemplo si una clase implementa JsonableInterface, necesita tener el método toJson().
- Funciones anónimas: ayudan a crear código más corto y se utilizan para definir rutas, eventos, filtros y en otras partes. Ejemplo de una función anónima adjunta a una ruta: Route::get(‘hi’, function(){ return ‘hi’;});
- Sobrecarga (overloading): también llamados métodos dinámicos o mágicos, nos permiten llamar a métodos que no estaban previamente definidos en una clase. Ejemplo: whereUsernameOrEmail ($name, $email) Estas llamadas se manejan con el método _call(), el cual trata de pasear el nombre para ejecutar uno o más de los métodos conocidos. En este caso ->where(‘usuario’, $usuario)->orWhere(‘email’,$email).
Laravel: Principales características y fuentes de inspiración
Veamos qué es lo que puedes esperar de un proyecto con Laravel y como éstas características pueden ayudar de incrementar su productividad.
- Modularidad: Laravel se ha construido utilizando más de 20 librerías diferentes fuertemente integradas con el gestor de dependencias Composer
- Testeabilidad: construido para facilitar el testeo, Laravel tiene con varios asistentes (helpers) que ayudan a visitar las rutas de testeo, navegando por el HTML resultante para asegurar que los métodos que se llaman desde las diferentes clases sean correctos, e incluso a impersonar a los usuarios.
- Enrutamiento (routing): Laravel proporciona un extrema flexibilidad en la definición de las rutas de la aplicación. Inspirado en la filosofía de los micro-frameworks Sinatra y Silex. Todavía más, es posible adjuntar funciones de filtro que se ejecuten en rutas específicas.
- Gestor de configuración: frecuentemente la aplicación se ejecutará en diferentes entornos, esto quiere decir que tanto la base de datos como credenciales o dominios serán diferentes si se ejecutan el local en el entorno de test o en los servidores de producción. Laravel nos permite definir configuraciones separadas para cada uno de los entornos.
- Confeccionador de consultas y ORM (Object Relational Mapper): cuando se instala Laravel viene con un constructor de consultas, este nos permite lanzar consultas a la base de datos con una sintaxis PHP de métodos enlazados, en lugar de tener que escribir la SQL completa. Además proporciona un ORM y una implementación de RegistroActivo (ActiveRecord) llamado Eloquent, que permite definir modelos interconectados. Estos componentes son compatibles con bases de datos tales como PostgreSQL, SQLite, MySql, MS SQL Server.
- Confeccionador esquema, migraciones y repoblaciones: inspirado por la filosofía Rails, estas características permiten definir un esquema de base de datos dentro de PHP y mantener un registro de los cambios para así ayudar en la migración de base de datos. Las repoblaciones (Seeding) permiten poblar las tablas seleccionadas de una base de datos una vez realizada la migración para de esta forma rellenar con datos las tablas.
- Motor de plantillas: Laravel viene con Blade, un lenguaje ligero de plantillas con el cual se pueden crear diseños anidados con bloques predefinidos en el que el contenido se inserta dinámicamente. Además Blade guarda en caché los archivos generados.
- Email: con la clase Mail que es un derivado de la librería SwiftMailer, Laravel proporciona una forma muy sencilla de enviar e-mails, con contenido HTML y adjuntos.
- Autenticación: Laravel viene con las herramientas para crear en toda web un formulario de registro, autenticación e incluso envio de contraseñas a usuarios que no la recuerden.
- Redis: es un sistema de almacenamiento clave-valor en memoria que tiene fama de ser extremadamente rápido.
- Colas: Laravel se integra con diversos servicios de colas, tales como Amazon SQS o IronMQ, para permitir el aplazamiento de tareas que son muy intensivas en recursos, así por ejemplo podemos enviar una gran cantidad de e-mails ejecutando esta tarea en segundo plano en lugar de hacer que el usuario espere delante de la pantalla.
Expresividad y simplicidad
El corazón de la filosofía de Laravel es la simplicidad y la expresividad. Esto quiere decir que los implementadores de Laravel han dado especial atención en el nombrado de las clases para comunicar con efectividad las acciones en un inglés sencillo.
Mira este código:
<? php Route:: get(' area/{ id}', function( $ id){ if( 51 = = $ area and !Auth:: check()) { return Redirect:: guest(' login'); } else { return “Bienvenido a tu parte ”. $area; } })->where (‘id’,’[0-9]+’);
Aunque probablemente no conozcas Laravel te puedes hacer una idea de lo que este código hace. Eso es expresividad, hacer que el código sea más legible, con lo que probablemente también será más sencillo aprender y recordar la sintaxis.
PHP “Guapificado”
Los autores de Laravel se han preocupado mucho por la sintaxis, así han hecho que todo sea más sencillo de recordar, por ejemplo tomemos la clase File que se utiliza para realizar manipulaciones con archivos.
- Más expresivo: para determinar cuándo un archivo se eliminó utilizamos File::lastModified($ruta) el lugar de la sintaxis PHP filemtime(realpath($ruta)) o para eliminar un archivo File::delete($ruta) en lugar de @unlink($ruta).
- Más consistente: algunas funciones de archivo de PHP tienen el prefijo file_ mientras que otras empiezan por file, es decir unas abreviadas y otras no, en Laravel todo es más consistente.
- Más testeable: muchas funciones de PHP pueden ser difíciles de utilizar en tests debido a las excepciones que lanzan y también porque son más difíciles de simular.
- Más extenso: se han agregado funciones que no existían antes como por ejemplo copiar un directorio File::copyDirectory ($directorioOriginal, $directorioFinal)
Existen muy pocos casos en los que la expresividad se ha sacrificado por la brevedad. Éste es el caso de algunas funciones como e(), que escapan las entidades HTML o dd() que muestran el contenido de una o más variables.
Hasta aquí nuestra primera parte. Esperamos tus comentarios.
BCNBIT ofrece servicios de programación en PHP y .NET, desarrollo WordPress, diseño de identidad corporativa. Si estás interesado no dudes en contactar o llámanos al: 933 006 550