Директива section
Директива section в Blade позволяет определить блок контента,
который будет передан в родительский макет. Она используется
в дочерних шаблонах для заполнения областей, объявленных
через yield в родительском шаблоне. Первым параметром
передаётся имя секции, вторым - содержимое секции.
Секция может быть определена как с использованием блочного синтаксиса,
так и с помощью однострочной записи.
Синтаксис
@section('section_name')
content
@endsection
{{-- или короткая запись --}}
@section('section_name', 'content')
Пример
Давайте создадим родительский макет с областью для контента:
<html>
<head>
<title>@yield('title', 'Default Title')</title>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
Теперь создадим дочерний шаблон, который определяет секции:
@extends('layouts.app')
@section('title', 'Home Page')
@section('content')
<h1>Welcome to Home Page</h1>
<p>This is the content section.</p>
@endsection
Результат рендеринга шаблона:
<html>
<head>
<title>Home Page</title>
</head>
<body>
<div class="container">
<h1>Welcome to Home Page</h1>
<p>This is the content section.</p>
</div>
</body>
</html>
Пример
Давайте используем секцию с условной логикой внутри:
@extends('layouts.app')
@section('content')
@if (Auth::check())
<h1>Welcome, {{ Auth::user()->name }}</h1>
@else
<h1>Welcome, Guest</h1>
@endif
<ul>
@foreach ([1, 2, 3, 4, 5] as $item)
<li>Item number {{ $item }}</li>
@endforeach
</ul>
@endsection
Результат выполнения кода для авторизованного пользователя:
<html>
<head>
<title>Default Title</title>
</head>
<body>
<div class="container">
<h1>Welcome, John Doe</h1>
<ul>
<li>Item number 1</li>
<li>Item number 2</li>
<li>Item number 3</li>
<li>Item number 4</li>
<li>Item number 5</li>
</ul>
</div>
</body>
</html>
Пример
Давайте создадим секцию, которая включает в себя другой шаблон:
<header>
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>
</header>
@extends('layouts.app')
@section('content')
@include('components.header')
<h1>About Us</h1>
<p>This page contains information about our company.</p>
@endsection
Результат выполнения кода:
<html>
<head>
<title>Default Title</title>
</head>
<body>
<div class="container">
<header>
<nav>
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>
</header>
<h1>About Us</h1>
<p>This page contains information about our company.</p>
</div>
</body>
</html>
Пример
Давайте используем секцию для передачи данных из контроллера:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\View\View;
class ArticleController extends Controller
{
public function index(): View
{
$articles = Article::where('status', 'published')->get();
return view('pages.articles', ['articles' => $articles]);
}
}
?>
@extends('layouts.app')
@section('title', 'Articles List')
@section('content')
<h1>Published Articles</h1>
@foreach ($articles as $article)
<div class="article">
<h2>{{ $article->title }}</h2>
<p>{{ $article->description }}</p>
<small>Published: {{ $article->created_at->format('d.m.Y') }}</small>
</div>
@endforeach
@endsection
Результат выполнения кода:
<html>
<head>
<title>Articles List</title>
</head>
<body>
<div class="container">
<h1>Published Articles</h1>
<div class="article">
<h2>First Article</h2>
<p>This is the description of first article.</p>
<small>Published: 15.01.2026</small>
</div>
<div class="article">
<h2>Second Article</h2>
<p>This is the description of second article.</p>
<small>Published: 14.01.2026</small>
</div>
<div class="article">
<h2>Third Article</h2>
<p>This is the description of third article.</p>
<small>Published: 13.01.2026</small>
</div>
</div>
</body>
</html>