Директива @extends
Laravel — это мощная функция, позволяющая создавать многоразовые модульные шаблоны в ваших веб-приложениях. Используя наследование шаблонов, вы можете упростить свой код, повысить удобство сопровождения и улучшить общий опыт разработки. В этой статье мы рассмотрим различные методы использования @extends
в Laravel, приведя примеры кода для иллюстрации каждого метода.
- Базовое наследование шаблонов.
Самый простой способ использования@extends
— создать базовый шаблон и расширить его в дочерних шаблонах. Вот пример:
<!-- base.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
<!-- child.blade.php -->
@extends('base')
@section('title', 'Child Template')
@section('content')
<h1>Welcome to the Child Template</h1>
@endsection
- Разделы и переопределение.
Вы можете определить разделы в базовом шаблоне с помощью@section
и переопределить их в дочерних шаблонах с помощью@overwrite
или@section
еще раз. Вот пример:
<!-- base.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@section('content')
<p>This is the default content.</p>
@show
</body>
</html>
<!-- child.blade.php -->
@extends('base')
@section('title', 'Child Template')
@section('content')
@parent
<p>This is additional content from the child template.</p>
@endsection
- Компоненты и слоты Blade:
В Laravel 8 появились компоненты Blade, которые обеспечивают более структурированный способ инкапсуляции повторно используемых компонентов пользовательского интерфейса. Вот пример:
<!-- base.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
<div class="container">
{{ $slot }}
</div>
</body>
</html>
<!-- child.blade.php -->
@extends('base')
@section('title', 'Child Template')
@section('content')
<h1>Welcome to the Child Template</h1>
@endsection
- Несколько уровней наследования.
Вы можете расширять шаблоны, которые уже расширяют другие шаблоны, что позволяет создавать сложные иерархические структуры. Вот пример:
<!-- grandparent.blade.php -->
<html>
<head>
<title>@yield('title')</title>
</head>
<body>
@yield('content')
</body>
</html>
<!-- parent.blade.php -->
@extends('grandparent')
@section('content')
<div class="container">
@yield('inner-content')
</div>
@endsection
<!-- child.blade.php -->
@extends('parent')
@section('title', 'Child Template')
@section('inner-content')
<h1>Welcome to the Child Template</h1>
@endsection
Это всего лишь несколько примеров того, как можно использовать директиву @extends
в Laravel для создания гибких и модульных шаблонов. Используя наследование шаблонов, вы можете значительно улучшить повторное использование кода и удобство обслуживания в своих веб-приложениях.
Не забывайте всегда учитывать конкретные потребности вашего проекта и выбирать метод, который лучше всего соответствует вашим требованиям.