Blade para PHP: guia completo com exemplos práticos
1. O que é e para que serve
Blade é um poderoso e elegante template engine que faz parte do framework Laravel. Ele oferece uma sintaxe conveniente para trabalhar com templates HTML, permitindo que desenvolvedores separem a lógica de apresentação da lógica de negócios da aplicação. Diferente do PHP puro, o Blade fornece construções concisas para loops, condicionais, herança de templates e inserção de componentes, tornando o código mais legível e fácil de manter.
O principal objetivo do Blade é simplificar a criação de páginas web dinâmicas. Ele compila os templates em código PHP comum, que é armazenado em cache até que o template seja modificado. Isso garante alta performance, pois não é necessário recompilar a cada requisição. O Blade também inclui proteção embutida contra ataques XSS através da sanitização da saída (função {{ }}).
O Blade é ideal para projetos em Laravel, mas também pode ser usado separadamente (através do pacote jenssegers/blade). Ele suporta herança de templates (layout), seções, componentes, slots, diretivas condicionais e muito mais. Graças à sua simplicidade e flexibilidade, o Blade se tornou o padrão de fato para template engine no ecossistema PHP.
2. Instalação
O Blade já vem incluído no Laravel, portanto, para usá-lo dentro do framework, não é necessária instalação adicional. Se você quiser usar o Blade separadamente (por exemplo, em um projeto sem Laravel), instale o pacote via Composer:
composer require jenssegers/blade
Após a instalação, você precisa criar uma instância da classe Blade e definir os caminhos para os templates e o cache:
use Jenssegers\Blade\Blade;
$blade = new Blade('views', 'cache');
echo $blade->render('index', ['name' => 'Mundo']);
Onde views é a pasta com os templates e cache é a pasta para os arquivos em cache.
3. Início rápido — exemplo mínimo funcional
Crie o arquivo de template views/hello.blade.php:
<!DOCTYPE html>
<html>
<head>
<title>Olá, {{ $name }}!</title>
</head>
<body>
<h1>Bem-vindo, {{ $name }}!</h1>
@if (strlen($name) > 5)
<p>Você tem um nome longo!</p>
@else
<p>Nome curto e bonito.</p>
@endif
</body>
</html>
Agora crie um script PHP para renderizar:
require 'vendor/autoload.php';
use Jenssegers\Blade\Blade;
$blade = new Blade('views', 'cache');
echo $blade->render('hello', ['name' => 'Alexandre']);
Resultado: uma página HTML com saudação e mensagem condicional.
4. Principais métodos/funções/classes
4.1. @extends — herança de template
Assinatura: @extends('layout.nome')
O que faz: Indica que o template atual herda de outro template (pai).
Exemplo:
<!-- layouts/app.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
<!-- pages/home.blade.php -->
@extends('layouts.app')
@section('title', 'Página inicial')
@section('content')
<h1>Bem-vindo!</h1>
@endsection
4.2. @section e @yield — seções
Assinatura: @section('nome', 'padrão') e @yield('nome', 'padrão')
O que faz: Define uma seção de conteúdo que será inserida no template pai através de @yield.
Exemplo:
<!-- parent.blade.php -->
<div>
@yield('sidebar', 'Barra lateral padrão')
</div>
<div>
@yield('content')
</div>
<!-- child.blade.php -->
@extends('parent')
@section('sidebar')
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
@endsection
@section('content')
<p>Conteúdo principal da página.</p>
@endsection