21 de marzo de 2013

¿Qué es Laravel?

Laravel es un nuevo y poderoso Framework PHP desarrollado por Taylor Otwell, que promete llevar al lenguaje PHP a un nuevo nivel.
Desarrollar aplicaciones usando Laravel es muy sencillo, fundamentalmente debido a su expresiva sintaxis, sus generadores de código, y su ORM incluido de paquete llamado Eloquent ORM.

Laravel, propone una forma de desarrollar aplicaciones web de un modo mucho más ágil. Por ejemplo, en Laravel opcionalmente podemos usar el patrón de diseño MVC (Modelo-Vista-Controlador) tradicional, donde al igual que otros fameworks PHP, el controlador es programado como una clase.
Por lo tanto, un Controlador es una clase PHP que dispone de métodos públicos que son el punto de entrada final de una petición HTTP (Request PHP) a nuestra aplicación. Pero, Lavarel propone además una forma distinta y más directa de responder a la solicitud HTTP, que veremos enseguida.

¿Modelo-Vista-Controlador? ó ...

Laravel 'entrega la opción' de seguir usando la metodología tradicional MVC. Sin embargo, el framework propone una vía más rápida en PHP, la cual consiste en programar la interacción HTTP directamente como una función anómina asociada a una Ruta.
Esto tiene la ventaja de reducir la cantidad de código, especialmente cuando sólo necesitamos incluir una funcionalidad.
Así, donde antes necesitabamos programar una clase, ahora en Laravel sólo requerimos escribir una función en PHP.
Por ejemplo, si para desarrollar una aplicación que responda a la url:
En el patrón MVC tradicional necesitamos crear un controlador, en este ejemplo, un controlador con el nombre 'usuario' y una acción 'listar' similar al siguiente código PHP:
    <?php 
        class Usuario_Controller extends Controller {

            public function __construct() {
                parent::__construct();
            }

            public function action_listar() {
                //punto de entrada de la petición HTTP
                ...

            }

        }
En cambio, en Laravel es mucho más directo en su código:
    <?php
        Route::get('usuario/listar', function() {
            //punto de entrada de la petición HTTP
            ...

        });

Laravel, propone en el desarrollo usar 'Routes with Closures', en lugar de un MVC tradicional.

Manejo de los Datos en Laravel

Laravel incluye una valiosa pieza de software, llamada Eloquent ORM. Este ORM se funda en patrón active record y su funcionamiento es en extremo sencillo.
Un ORM (Object Relational Mapper) en PHP es un software que permite tratar la capa de persistencia de los datos, como simples accesos a métodos de una Clase u Objeto en PHP.
La funcionalidad interna del ORM es mapear los objetos de PHP a las tablas en la base de datos, para el caso en que la persistencia de los datos de la aplicación es proporcionada por una DB.
En Laravel es opcional el uso de Eloquent, pues también dispone de otros recursos que nos facilitan interactuar con los datos, o especificamente la creación de modelos.
La forma de interactuar con los datos en un patrón de diseño MVC, es mediante la creación de Modelos. Los Modelos son clases en PHP que encapsulan toda el trabajo con los datos de una aplicación.

Laravel: Los Modelos

La forma de crear Modelos en Laravel usando Eloquent ORM, es tan simple como:
    class Libro extends Eloquent {

        //defiendo el nombre de la tabla con la info de los libros
        public static $table = 'tb_libros';
    }

Incluso el código del modelo puede ser más simple aún, en el caso que el nombre de la tabla coincida con el nombre de la clase. Pues Laravel al igual que Ruby on Rails, usa el paradigma de programación donde se favorece "la convención sobre la configuración". Y si ahora necesitamos disponer un listado, en la ruta:
Entonces, sólo bastaría crear la Ruta e interactuar con el modelo 'Libro' anteriormente creado, del modo siguiente:
    Route::get('libro/listar', function() {

        //obtener todos los registros de la tabla 'tb_libros':
        $libros = Libro::all();

        //haciendo disponibles los datos a la vista y desplegándola:
        return View::make('mi_vista', $libros);
    });
Las Vistas en Laravel, al igual que en otros Frameworks PHP, son archivos de texto plano, que contienen una plantilla HTML junto con código PHP para desplegar la interfaz web al usuario de la aplicación.

Laravel: las Vistas

Laravel incluye de paquete un sistema de procesamiento de plantillas llamado Blade. Este sistema de plantillas, Blade favorece un código mucho más limpio en las Vistas, además de incluir un sistema de Caché que lo hace mucho más rápido.
Los Sistemas de Cache, evitan el tener que procesar el código una y otro vez en cada petición. Para lo cual, estos sistemas generan versiones estáticas en memoria o disco duro con archivos que corresponden a peticiones previamente procesadas. Y con está técnica se logra mejorar el rendimiento de la aplicación.
El sistema Blade de Laravel, permite una sintaxis mucho más reducida en su escritura. Por ejemplo, en vez pintar la vista usando el código PHP:
    <php echo $mi_nombre; >
En Blade se escribiría:
    {{$mi_nombre}}
Lo cual, no es una gran ventaja sobre todo cuando siempre es posible usar una expresión resumida en PHP. No obstante, lo que si es una gran ventaja, es el modo en que Blade maneja los Layouts.
Los Layouts en los frameworks PHP, permiten organizar las vistas en PHP. En especial, todos los elementos estáticos en una aplicación web que no cambian entre peticiones HTTP, como lo son:
  • Los Header,
  • Menús,
  • y Footers.
Generalmente, a estos elementos se les denomina 'partial views' (vistas parciales).

Uso Layouts con Blade

Los Layouts en Blade, son archivos de texto plano que contiene todo el HTML de la página con etiquetas que representan elementos o zonas a incluir en el Layout, o vistas parciales como se conocen en otros Frameworks en PHP.
Sin embargo, en Blade estos elementos incrustados se organizan en un sólo archivo. Esta es una idea muy interesante de Laravel que mejora la organización de las vistas y su rendimiento. Sobre todo cuando las vistas pueden llegar a ser muy complejas incluso con elementos anidados.
En el render de una Vista completa en Lavarel se usan dos (2) archivos:
  • El Layouts definiendo el HTML global y las zonas a incluir.
  • Un sólo archivo, la Vista, con los elementos (partial views).
Un código típico sería para una Layout HTML5 de Blade:
<!DOCTYPE html>
<html lang="es">
    <head>
        <meta charset="UTF-8">
        <title>@yield('titulo')</title>
    </head>
    <body>

    </body>
</html>
En el Layout presentado, el código @yield() identifica al método donde como parámetro se indica el nombre de la zona desplegar. Por otro lado, el código de la vista , donde se define el Layout a usar y la información de las distintas zonas a desplegar:
<!-- identificando el Layout a Utilizar -->
@layout('template')

<!-- definiendo una zona -->
@section('titulo')
    <!-- incluir el código de la sección de nombre 'titulo' -->
    ...
@endsection

<!-- definiendo otra zona -->
@section('navegacion')
    <!-- incluir el código de la sección de nombre 'navegacion' -->
    ...
@endsection

Entonces: ¿Laravel es para Todos?

Laravel presenta grandes ventajas en el desarrollo web en PHP, apoyado en los avances de las nuevas versiones de PHP han ofrecido a la comunidad. Este hecho, implica que para usar Lavarel necesitamos disponer de versiones modernas de PHP.
La actual versión de Laravel 3.2 requiere PHP 5.3, lo cual significa en la práctica que si tenemos código heredado que fueron programados para usar versiones antiguas del intérprete PHP, este no funcionará correctamente si lo ejecutamos en PHP 5.3 en el mismo servidor web.
En resumen, Laravel es una excelente herramienta de software para el desarrollo día a día, dispone de algunos de los factores claves que hacen a un proyecto open source exitoso:
  • No tiene requerimientos exóticos sobre el stack de publicación.
  • Una muy buena y completa documentación online.
  • Y una comunidad creciente en el apoyo de este proyecto.

Otros recursos de Laravel: