Laravel Blade: Templates, Componentes e Layouts: Do Básico ao Avançado Já leu

Introdução ao Laravel Blade O Laravel Blade é o motor de templates padrão do framework Laravel, projetado para tornar a criação de views mais expressiva e menos verbosa. Diferentemente de trabalhar diretamente com PHP puro, o Blade oferece uma sintaxe limpa baseada em diretivas que se compilam para código PHP otimizado. Desde sua criação, tornou-se a escolha padrão para renderizar HTML dinâmico em aplicações Laravel, permitindo que desenvolvedores escribam código mais legível e manutenível. A principal característica do Blade é sua simplicidade: você escreve templates com extensão usando diretivas intuitivas como , e , que são automaticamente convertidas para PHP válido antes da execução. Além disso, o Blade oferece proteção contra XSS por padrão e integra-se perfeitamente com os componentes e layouts do Laravel, formando um ecossistema completo para gerenciar a camada de view da sua aplicação. Sintaxe Fundamental e Diretivas Essenciais Exibindo Dados e Escape de Output A forma mais básica de exibir dados em Blade é através das

Introdução ao Laravel Blade

O Laravel Blade é o motor de templates padrão do framework Laravel, projetado para tornar a criação de views mais expressiva e menos verbosa. Diferentemente de trabalhar diretamente com PHP puro, o Blade oferece uma sintaxe limpa baseada em diretivas que se compilam para código PHP otimizado. Desde sua criação, tornou-se a escolha padrão para renderizar HTML dinâmico em aplicações Laravel, permitindo que desenvolvedores escribam código mais legível e manutenível.

A principal característica do Blade é sua simplicidade: você escreve templates com extensão .blade.php usando diretivas intuitivas como @if, @foreach e @include, que são automaticamente convertidas para PHP válido antes da execução. Além disso, o Blade oferece proteção contra XSS por padrão e integra-se perfeitamente com os componentes e layouts do Laravel, formando um ecossistema completo para gerenciar a camada de view da sua aplicação.

Sintaxe Fundamental e Diretivas Essenciais

Exibindo Dados e Escape de Output

A forma mais básica de exibir dados em Blade é através das chaves duplas {{ }}, que automaticamente escapam o conteúdo para prevenir vulnerabilidades XSS:

<!-- resources/views/product.blade.php -->
<h1>{{ $product->name }}</h1>
<p>{{ $product->description }}</p>

Se você precisa exibir HTML sem escape, use três chaves {!! !!}, mas tenha cuidado com dados não confiáveis:

<!-- Exibe HTML puro -->
{!! $product->formatted_html !!}

<!-- Verificar se variável existe -->
{{ $user->email ?? 'Email não disponível' }}

Estruturas de Controle

As estruturas condicionais e de loops em Blade simplificam bastante o código PHP tradicional. Veja como ficam mais legíveis:

@if ($user->isAdmin())
    <div class="admin-panel">Painel Administrativo</div>
@elseif ($user->isEditor())
    <div class="editor-panel">Painel do Editor</div>
@else
    <div class="user-panel">Painel do Usuário</div>
@endif

<!-- Loops -->
@forelse ($products as $product)
    <div class="product-card">
        <h3>{{ $product->name }}</h3>
        <p>Preço: R$ {{ number_format($product->price, 2, ',', '.') }}</p>
    </div>
@empty
    <p>Nenhum produto disponível.</p>
@endforelse

A diretiva @forelse é particularmente útil pois oferece tratamento para listas vazias em uma única estrutura, eliminando a necessidade de @if adicional.

Layouts, Includes e Componentes

Estrutura de Layouts

Um layout em Blade funciona como template mestre que define a estrutura HTML comum a várias páginas. Use a diretiva @yield para definir seções que serão preenchidas por views filhas:

<!-- resources/views/layouts/app.blade.php -->
<!DOCTYPE html>
<html>
<head>
    <title>@yield('title', 'Minha Aplicação')</title>
    <link rel="stylesheet" href="/css/app.css">
</head>
<body>
    <nav>
        <a href="/">Home</a>
    </nav>

    <main>
        @yield('content')
    </main>

    <footer>
        <p>&copy; 2024</p>
    </footer>
</body>
</html>

Uma view filha herda deste layout usando @extends:

<!-- resources/views/products/index.blade.php -->
@extends('layouts.app')

@section('title', 'Produtos')

@section('content')
    <h1>Lista de Produtos</h1>
    @foreach ($products as $product)
        <div>{{ $product->name }}</div>
    @endforeach
@endsection

Includes para Reutilização

Use @include para inserir templates parciais dentro de outras views, permitindo reutilização sem herança:

<!-- resources/views/partials/header.blade.php -->
<header>
    <h1>{{ $title ?? 'Bem-vindo' }}</h1>
</header>

<!-- Usando em outra view -->
@include('partials.header', ['title' => 'Produtos'])

<!-- Incluir múltiplos arquivos -->
@each('partials.product-card', $products, 'product')

A diretiva @each é ideal quando você precisa iterar e incluir um partial para cada item, sendo mais concisa que @foreach com @include.

Componentes Blade Modernos

A partir do Laravel 7.x, componentes Blade oferecem uma forma mais poderosa e reutilizável de estruturar a UI. São classes PHP que representam uma view com lógica específica:

// app/View/Components/Alert.php
namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{
    public function __construct(
        public string $type = 'info',
        public string $message = ''
    ) {}

    public function render()
    {
        return view('components.alert');
    }
}
<!-- resources/views/components/alert.blade.php -->
<div class="alert alert-{{ $type }}">
    {{ $message }}
</div>

Usar o componente em suas views é extremamente simples com a sintaxe de tag customizada:

<!-- Usar o componente -->
<x-alert type="success" message="Operação realizada com sucesso!" />

<!-- Componentes com slots (conteúdo) -->
<x-card title="Meu Card">
    <p>Conteúdo do card aqui</p>
</x-card>

Para componentes com conteúdo dinâmico, defina slots na view do componente:

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

Boas Práticas e Otimizações

Organize seus layouts em diretórios clara: mantenha layouts mestres em resources/views/layouts/, partials em resources/views/partials/ e componentes em resources/views/components/. Essa estrutura facilita a navegação e manutenção conforme seu projeto cresce.

Sempre escape dados do usuário por padrão usando {{ }} e use {!! !!} apenas quando tiver certeza que o conteúdo é seguro. Aproveite o caching automático do Blade em produção — as views compiladas são cacheadas, então não há overhead de compilação a cada request. Para desenvolvimento, execute php artisan view:clear quando precisar limpar o cache manualmente. Use @auth e @guest para verificações de autenticação diretamente nos templates, evitando verificações desnecessárias no controller.

<!-- Verificar autenticação -->
@auth
    <p>Bem-vindo, {{ Auth::user()->name }}</p>
@endauth

@guest
    <a href="/login">Faça login</a>
@endguest

<!-- Componentes parametrizados com atributos mesclados -->
<x-button :disabled="$isLoading" class="btn-large">
    {{ $isLoading ? 'Carregando...' : 'Enviar' }}
</x-button>

Conclusão

O Laravel Blade revoluciona a forma como escrevemos views em PHP ao combinar uma sintaxe expressiva e amigável com recursos poderosos como layouts, includes e componentes. O domínio dessas três técnicas — templates base com @extends/@yield, reutilização com @include, e componentes reutilizáveis — forma a base de uma arquitetura view profissional e escalável. Pratique criando layouts aninhados, componentes parametrizados e mantendo sua estrutura de diretórios organizada para colher todos os benefícios dessa ferramenta extraordinária.

Referências


Artigos relacionados