Laravel es un framework de cdigo abierto para desarrollar aplicaciones y servicios web
con PHP 5 y PHP 7. Su filosofa es desarrollar cdigo PHP de forma elegante y simple,
evitando el "cdigo espagueti". Fue creado en 2011 y tiene una gran influencia de
frameworks como Ruby on Rails, Sinatra y [Link] MVC.2
Visin general
Laravel tiene como objetivo ser un framework que permita el uso de una sintaxis elegante
y expresiva para crear cdigo de forma sencilla y permitiendo multitud de funcionalidades.
Intenta aprovechar lo mejor de otros frameworks y aprovechar las caractersticas de las
ltimas versiones de PHP.2
Gran parte de Laravel est formado por dependencias, especialmente de Symfony, esto
implica que el desarrollo de Laravel dependa tambin del desarrollo de sus dependencias.
Caractersticas
Sistema de ruteo, tambin RESTful3
Blade, Motor de plantillas45
Peticiones Fluent6
Eloquent ORM7
Basado en Composer8
Soporte para el cach9
Soporte para MVC10
Usa componentes de Symfony11
Adopta las especificaciones PSR-212 y PSR-4 1314
Patrn MVC
Laravel propone en el desarrollo usar 'Routes with Closures', en lugar de un MVC
tradicional con el objetivo de hacer el cdigo ms claro. Aun as permite el uso de MVC
tradicional.10
<?php
Route::get('usuario/listar', function() {
//punto de entrada de la peticin HTTP
...
});
Modelo
Laravel incluye un sistema de mapeo de datos relacional llamado Eloquent ORM que
facilita la creacin de modelos. Este ORM se funda en patrn active record y su
funcionamiento es muy sencillo. Es opcional el uso de Eloquent, pues tambin dispone de
otros recursos que nos facilitan interactuar con los datos, o especficamente la creacin
de modelos.7
La forma de crear Modelos en Laravel usando Eloquent ORM, es tan simple como:
1 use Illuminate\Database\Eloquent\Model;
2
3 class Libro extends Model {
4
5 //defiendo el nombre de la tabla con la info de los libros
6 protected $table = 'tb_libros';
7 }
Incluso el cdigo del modelo puede ser ms simple an, 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 programacin donde se favorece "la convencin sobre la configuracin".Y si
ahora necesitamos disponer un listado, en la ruta: [Link]
Entonces, slo bastara crear la Ruta e interactuar con el modelo 'Libro' anteriormente
creado, del modo siguiente:
Route::get('libro/listar', function() {
$libros = Libro::all();
return View::make('mi_vista', $libros); //Muestra los datos
});
Vista
Laravel incluye de paquete un sistema de procesamiento de plantillas llamado Blade. Este
sistema de plantillas favorece un cdigo mucho ms limpio en las Vistas, adems de incluir
un sistema de Cach que lo hace mucho ms rpido. El sistema Blade de Laravel, permite
una sintaxis mucho ms reducida en su escritura.4 Por ejemplo, en vez pintar la vista
usando el cdigo PHP:
<?= $mi_nombre; ?>
En Blade se escribira:
{{$mi_nombre}}
Lo cual no es una gran ventaja sobre todo cuando siempre es posible usar una expresin
resumida en PHP. No obstante, lo que si es una gran ventaja, es el modo en que Blade
maneja las plantillas.
Plantillas
Las plantillas en Blade son archivos de texto plano que contiene todo el HTML de la pgina
con etiquetas que representan elementos o zonas a incluir en la plantilla, o vistas parciales
como se conocen en otros frameworks PHP. Sin embargo, en Blade estos elementos
incrustados se organizan en un slo archivo. Esta es una idea muy interesante de Laravel
que mejora la organizacin 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 archivos: la plantilla definiendo el HTML global y las
zonas a incluir. Un slo archivo, la Vista, con los elementos (partial views).
Un ejemplo tpico para una plantilla HTML5 de Blade:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>@yield('titulo')</title>
</head>
<body>
@yield('navegacion')
</body>
</html>
En la plantilla presentada, el cdigo @yield() identifica al mtodo donde como parmetro
se indica el nombre de la zona desplegar. Por otro lado, el cdigo de la vista, donde se
define la plantilla a usar y la informacin de las distintas zonas a desplegar:
<!-- identificando la plantilla a utilizar -->
@extends('template')
<!-- definiendo una zona -->
@section('titulo')
@stop
<!-- definiendo otra zona -->
@section('navegacion')
@stop
Controlador
Los controladores contienen la lgica de la aplicacin y permiten organizar el cdigo en
clases sin tener que escribirlo todo en las rutas. Todos los controladores deben extenderse
de la clase [Link] de eso
Un ejemplo de un controlador en Laravel:
class UserController extends BaseController {
public function mostrarPerfil($id)
{
$user = User::find($id);
return View::make('[Link]', array('user' => $user));
}
}
Estos pueden ser llamados en las rutas de diferentes maneras, pero la ms comn usndo
rutas es:
Route::get('user/{id}', 'UserController@mostrarPerfil');