Директива @extends
Директива @extends в Blade-шаблонах Laravel служит для создания иерархии шаблонов. Она указывает, какой родительский макет должен быть расширен текущим шаблоном. Первым и единственным параметром передаётся путь к родительскому шаблону относительно папки resources/views. После использования директивы @extends, дочерний шаблон может определять секции с помощью @section, которые будут вставлены в соответствующие места родительского макета через @yield.
Синтаксис
@extends('parent.view')
@section('content')
Дочерний контент
@endsection
Пример
Создадим родительский макет с основной структурой страницы:
<html>
<head>
<title>@yield('title', 'Default Title')</title>
</head>
<body>
<header>
@yield('header')
</header>
<main>
@yield('content')
</main>
<footer>
@yield('footer')
</footer>
</body>
</html>
Теперь создадим дочерний шаблон, который расширяет этот макет:
@extends('layouts.app')
@section('title', 'Home Page')
@section('header')
<h1>Welcome to the site</h1>
@endsection
@section('content')
<p>This is the main content of the home page.</p>
@endsection
@section('footer')
<p>© 2026 All rights reserved.</p>
@endsection
Результат выполнения кода при рендеринге дочернего шаблона:
<html>
<head>
<title>Home Page</title>
</head>
<body>
<header>
<h1>Welcome to the site</h1>
</header>
<main>
<p>This is the main content of the home page.</p>
</main>
<footer>
<p>© 2026 All rights reserved.</p>
</footer>
</body>
</html>
Пример
Использование @parent внутри секции для добавления контента к родительскому:
<html>
<body>
@section('sidebar')
Default sidebar content
@show
<div class="content">
@yield('content')
</div>
</body>
</html>
Дочерний шаблон, который расширяет базовый и добавляет контент к секции sidebar:
@extends('layouts.base')
@section('sidebar')
@parent
<p>Additional sidebar content for profile page</p>
@endsection
@section('content')
<h2>User Profile</h2>
<p>Profile information goes here.</p>
@endsection
Результат выполнения кода при рендеринге дочернего шаблона:
<html>
<body>
Default sidebar content
<p>Additional sidebar content for profile page</p>
<div class="content">
<h2>User Profile</h2>
<p>Profile information goes here.</p>
</div>
</body>
</html>
Пример
Использование нескольких уровней наследования шаблонов:
@extends('layouts.app')
@section('header')
<h1>Admin Panel</h1>
@endsection
@section('content')
<div class="admin-content">
@yield('admin-content')
</div>
@endsection
Создадим шаблон для страницы управления пользователями:
@extends('layouts.admin')
@section('title', 'User Management')
@section('admin-content')
<h2>Users List</h2>
<ul>
<li>User 1</li>
<li>User 2</li>
<li>User 3</li>
</ul>
@endsection
Результат выполнения кода при рендеринге шаблона admin/users:
<html>
<head>
<title>User Management</title>
</head>
<body>
<header>
<h1>Admin Panel</h1>
</header>
<main>
<div class="admin-content">
<h2>Users List</h2>
<ul>
<li>User 1</li>
<li>User 2</li>
<li>User 3</li>
</ul>
</div>
</main>
<footer>
<p>© 2026 All rights reserved.</p>
</footer>
</body>
</html>