3-1-Blade en Laravel

Blade en Laravel + Componentes

Blade es el motor de plantillas de Laravel que ofrece una sintaxis elegante y potente para trabajar con vistas. Aquí te presento una guía estructurada con los conceptos esenciales y el uso de componentes.


1. Sintaxis Básica de Blade

A. Mostrar Variables

php
Copy
Download
{{ $variable }}               // Escapa HTML automáticamente
{!! $html !!}                // Sin escape (para HTML seguro)

B. Estructuras de Control

Condicionales

php
Copy
Download
@if($condition)
  // Contenido
@elseif($anotherCondition)
  // Contenido
@else
  // Contenido
@endif

@unless($condition)          // Equivalente a if(!$condition)
  // Contenido
@endunless

Bucles

php
Copy
Download
@for($i = 0; $i < 10; $i++)
  // Contenido
@endfor

@foreach($items as $item)
  {{ $item->name }}
@endforeach

@forelse($items as $item)    // Maneja arrays vacíos
  {{ $item->name }}
@empty
  <p>No hay items</p>
@endforelse

2. Layouts y Herencia

A. Layout Principal (layouts/app.blade.php)

php
Copy
Download
<!DOCTYPE html>
<html>
<head>
    <title>@yield('title')</title>
    @stack('styles')  <!-- Para CSS específico -->
</head>
<body>
    @include('partials.header')
    
    <div class="content">
        @yield('content')
    </div>
    
    @include('partials.footer')
    @stack('scripts') <!-- Para JS específico -->
</body>
</html>

B. Vista que Extiende el Layout

php
Copy
Download
@extends('layouts.app')

@section('title', 'Página de Inicio')

@section('content')
    <h1>Contenido Principal</h1>
@endsection

@push('scripts')
    <script src="/custom.js"></script>
@endpush

3. Componentes en Blade

A. Crear un Componente

bash
Copy
Download
php artisan make:component Alert

📌 Estructura generada:

  • app/View/Components/Alert.php (Clase)

  • resources/views/components/alert.blade.php (Vista)

B. Componente Básico (Alert.php)

php
Copy
Download
namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    public $type;
    
    public function __construct($type = 'info')
    {
        $this->type = $type;
    }
    
    public function render()
    {
        return view('components.alert');
    }
}

C. Vista del Componente (alert.blade.php)

php
Copy
Download
<div class="alert alert-{{ $type }}">
    {{ $slot }} <!-- Contenido pasado al componente -->
</div>

D. Uso del Componente

php
Copy
Download
<x-alert type="success">
    ¡Operación exitosa!
</x-alert>

E. Componentes con Slots Nombrados

php
Copy
Download
<!-- resources/views/components/card.blade.php -->
<div class="card">
    <div class="card-header">
        {{ $title }}
    </div>
    <div class="card-body">
        {{ $slot }}
    </div>
</div>

<!-- Uso -->
<x-card>
    @slot('title') Título Personalizado @endslot
    Contenido del card...
</x-card>

4. Directivas Personalizadas

A. Registrar en AppServiceProvider

php
Copy
Download
use Illuminate\Support\Facades\Blade;

public function boot()
{
    Blade::directive('datetime', function ($expression) {
        return "<?php echo ($expression)->format('d/m/Y H:i'); ?>";
    });
}

B. Uso en Vistas

php
Copy
Download
@datetime($post->created_at)

5. Includes y Fragmentos

A. Incluir Sub-vistas

php
Copy
Download
@include('partials.header', ['title' => 'Inicio'])

B. Fragmentos Reutilizables

php
Copy
Download
<!-- partials/buttons.blade.php -->
@props(['type' => 'submit'])

<button type="{{ $type }}" {{ $attributes }}>
    {{ $slot }}
</button>

<!-- Uso -->
<x-buttons class="btn-primary">Enviar</x-buttons>

6. Tabla Comparativa: Blade vs Componentes

CaracterísticaBlade ClásicoComponentes
Reutilización@include o @extendsClases + plantillas encapsuladas
LógicaDirectivas simplesLógica PHP en clases
PropsVariables pasadas manualmenteProps declaradas en clase
SlotsNo nativoSlots y slots nombrados
RendimientoLigeroOptimizado con caché

7. Consejos Avanzados

  1. Atributos Dinámicos:

    php
    Copy
    Download
    <x-button {{ $attributes->merge(['class' => 'btn']) }}>
  2. Componentes Anónimos (Laravel 8+):

    bash
    Copy
    Download
    php artisan make:component forms.input --inline
  3. Acceder a Atributos:

    php
    Copy
    Download
    {{ $attributes->get('class') }}

8. Ejemplo Completo: Sistema de Notificaciones

Componente (Notification.php)

php
Copy
Download
public $type;
public $message;

public function __construct($type = 'info', $message = '')
{
    $this->type = $type;
    $this->message = $message;
}

Vista (notification.blade.php)

php
Copy
Download
<div class="notification notification-{{ $type }}">
    {{ $message ?? $slot }}
</div>

Uso

php
Copy
Download
<x-notification type="error" message="Error crítico"/>
<!-- O -->
<x-notification type="success">
    Registro completado!
</x-notification>

Documentación Oficial:

Con esta guía dominarás Blade y componentes para crear vistas mantenibles y escalables en Laravel. ¡A codear! 🚀

Comentarios

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas