# Laravel

Laravel es un framework de código abierto para desarrollar aplicaciones y servicios web con PHP. Su filosofía es desarrollar código PHP de forma elegante y simple, evitando el "código espagueti". Fue creado en 2011 y tiene una gran influencia de frameworks como Ruby on Rails, Sinatra y ASP.NET MVC.
Laravel ofrece utilidades que simplifican la creación de aplicaciones web, agilizando significativamente este proceso y generando un código organizado y manejable. Gracias a esta característica, la popularidad de Laravel ha experimentado un rápido crecimiento en los últimos tiempos, atrayendo a numerosos desarrolladores que lo eligen como su framework preferido para alcanzar una eficiente metodología de desarrollo.

## Visión general

Laravel tiene como objetivo ser un framework que permita el uso de una sintaxis elegante y expresiva para crear código de forma sencilla y permitiendo multitud de funcionalidades. Intenta aprovechar lo mejor de otros frameworks y aprovechar las características de las últimas versiones de PHP. Gran parte de Laravel está formado por dependencias, especialmente de Symfony, esto implica que el desarrollo de Laravel dependa también del desarrollo de sus dependencias.

## Características

El marco de desarrollo Laravel utiliza una estructura de directorios avanzada, fomentando así la segregación de archivos con una organización adecuada y definida. Esto proporciona una guía clara para todos los miembros del equipo y se convierte en un estándar consistente en diferentes proyectos.
Además, Laravel ofrece un amplio conjunto de funcionalidades que cubren la mayoría de las necesidades en el desarrollo de aplicaciones web. Algunas de estas características incluyen:
* Sistema de enrutamiento, también RESTful
* Blade, Motor de plantillas
* Peticiones Fluent
* Eloquent ORM
* Basado en Composer
* Soporte para el caché
* Soporte para MVC
* Usa componentes de Symfony
* Adopta las especificaciones PSR-2 y PSR-4

## Patrón MVC

Laravel propone en el desarrollo usar 'Routes with Closures', en lugar de un MVC tradicional con el objetivo de hacer el código más claro. Aun así permite el uso de MVC tradicional.

### Modelo

Laravel incluye un sistema de mapeo de datos relacional llamado Eloquent ORM que facilita la creación de modelos. Este ORM se funda en un patrón active record. Es opcional el uso de Eloquent, pues también dispone de otros recursos que facilitan la interacción con los datos, o específicamente la creación de modelos.
La forma de crear Modelos en Laravel usando Eloquent ORM, es tan simple como:
El código del modelo puede ser más simple en el caso de que el nombre de la tabla coincida con el nombre de la clase, ya que Laravel, al igual que Ruby on Rails, usa el paradigma de programación donde se favorece "la convención sobre la configuración". Si ahora necesitamos disponer un listado, en la ruta: http://mi-aplicacion.com/libro/listar Entonces, solo bastaría crear la Ruta e interactuar con el modelo 'Libro' anteriormente creado, del modo siguiente:

### Vista

Laravel incluye de paquete un sistema de procesamiento de plantillas llamado Blade. Este sistema de plantillas 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. 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:
En Blade se escribiría:
Lo cual no es una gran ventaja, 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 las plantillas.

#### Plantillas.

Las plantillas 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 la plantilla, o vistas parciales como se conocen en otros frameworks PHP. Sin embargo, en Blade estos elementos incrustados se organizan en un solo 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 Laravel se usan dos archivos: la plantilla definiendo el HTML global y las zonas a incluir. Un solo archivo, la Vista, con los elementos (partial views).
Un ejemplo típico para una plantilla HTML5 de Blade:
En la plantilla presentada, 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 la plantilla a usar y la información de las distintas zonas a desplegar:

### Controlador

Los controladores contienen la lógica de la aplicación y permiten organizar el código en clases sin tener que escribirlo todo en las rutas. Todos los controladores deben extenderse de la clase BaseController además de eso
Un ejemplo de un controlador en Laravel:
Estos pueden ser llamados en las rutas de diferentes maneras, pero la más común usando rutas es:

## MIDDLEWARE

Un middleware en Laravel es un componente que actúa como un intermediario entre la solicitud del cliente y la aplicación. Se utiliza para filtrar o modificar las solicitudes HTTP antes de que lleguen al controlador y las respuestas antes de que regresen al cliente.
Por ejemplo, los middleware se pueden usar para tareas como:
* Autenticar usuarios.
* Verificar permisos.
* Registrar solicitudes.
* Modificar cabeceras HTTP.
Laravel proporciona varios middleware predefinidos, como auth, csrf, y throttle. También puedes crear tus propios middleware para manejar necesidades específicas.

### Ejemplo de Implementación de Middleware
#### 1. Crear un Middleware Personalizado

Utiliza el comando Artisan para generar un nuevo middleware php artisan make:middleware NombreDelMiddleware. En este caso, crearemos un middleware que solo permita el acceso a usuarios con una edad mínima: php artisan make:middleware CheckAge
Esto generará un archivo en app/Http/Middleware/CheckAge.php.

#### 2. Implementar la Lógica del Middleware

Edita el archivo CheckAge.php para agregar la lógica:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckAge
* Handle an incoming request.
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
public function handle(Request $request, Closure $next)
if ($request->age < 18) {
return response('Acceso denegado: Debes ser mayor de 18 años.', 403);
return $next($request);

#### 3. Registrar el Middleware

Registra el middleware en app/Http/Kernel.php. Puedes agregarlo como un middleware global o asignarlo a un grupo o ruta específica. Aquí lo registramos como middleware específico:
protected $routeMiddleware = [
// Otros middleware
'check.age' => \App\Http\Middleware\CheckAge::class,

#### 4. Usar el Middleware en Rutas

Aplica el middleware a una ruta o grupo de rutas en routes/web.php:
Route::get('/restricted', function {
return 'Bienvenido a la sección restringida.';
})->middleware('check.age');

### Prueba

* Accede a la URL /restricted e incluye un parámetro age en la solicitud (por ejemplo, http://localhost/restricted?age=20).
* Si age es menor que 18, la respuesta será 403 Acceso denegado. Si es 18 o mayor, verás el mensaje "Bienvenido a la sección restringida."

## Eloquent ORM

Eloquent ORM es un sistema de mapeo objeto-relacional (ORM, por sus siglas en inglés) utilizado en el framework de desarrollo web Laravel. Proporciona una forma sencilla y elegante de interactuar con la base de datos desde la capa de aplicación utilizando el paradigma de programación orientada a objetos.
¿Qué es un ORM?
El acrónimo ORM significa "Mapeo relacional de objetos" o "Mapeo relacional de objetos". Es un método de programación para convertir datos entre los sistemas de tipos utilizados por los lenguajes de programación orientados a objetos y las bases de datos relacionales.
Se puede acceder a una base de datos utilizando un ORM de una manera similar a la de una base de datos orientada a objetos, en pocas palabras.
Eloquent ORM en Laravel
Eloquent ORM es el ORM predeterminado incluido en el framework Laravel, que es uno de los marcos de desarrollo web más populares y robustos en el ecosistema de PHP. Laravel se destaca por su elegancia, facilidad de uso y una amplia gama de características útiles para el desarrollo web.
Se basa en el patrón de diseño Active Record, donde cada tabla de la base de datos se asocia con un modelo de Eloquent. Un modelo de Eloquent es simplemente una clase que extiende la clase base proporcionada por Eloquent y define las relaciones y las reglas de acceso a la base de datos.
Características de Eloquent ORM
Mapeo de base de datos a objetos: Eloquent permite mapear las tablas de la base de datos a clases de modelos de forma sencilla. Cada columna de la tabla se representa como una propiedad en el modelo y cada registro se convierte en una instancia del modelo.
Relaciones de base de datos: Eloquent facilita el establecimiento de relaciones entre tablas de la base de datos. Puedes definir relaciones como "uno a uno", "uno a muchos" o "muchos a muchos" entre los modelos, lo que simplifica la navegación y la manipulación de datos relacionados.
Consultas fluidas: Eloquent proporciona una API expresiva y fluida para construir consultas a la base de datos. Puedes encadenar métodos en tus consultas para especificar condiciones, ordenar resultados y limitar los registros devueltos.
Migraciones de base de datos: Eloquent facilita la gestión de esquemas de base de datos a través de migraciones. Puedes definir y ejecutar migraciones para crear, modificar o eliminar tablas y columnas de la base de datos de manera controlada, lo que facilita el trabajo en equipo y la gestión de versiones de la base de datos.
Eventos y ganchos: Eloquent proporciona eventos y ganchos que te permiten realizar acciones personalizadas antes o después de que se realicen ciertas operaciones en el modelo, como crear, actualizar o eliminar registros. Esto te brinda un control adicional sobre el flujo de tu aplicación y la manipulación de datos.

## Influencia

La influencia de Laravel ha crecido rápidamente desde su lanzamiento. En la comunidad de desarrolladores es considerado como alternativa sencilla de usar pero que tiene todas las funcionalidades que debe tener un framework. Ha sido descargado más de 20.500.000 de veces, y se espera que supere en popularidad a otros frameworks ya establecidos más antiguos.