В моих любимых фреймворках шаблонов они, как правило, имеют возможность размещать макеты. Возможно ли это в Blade?
Например...
master.blade.php
<html>
<head><!-- stuff --></head>
<body>
@yield('content')
</body>
</html>
nav.blade.php
@extend('master')
<nav>
<!-- nav content -->
</nav>
@yeild('content')
breadcrumb.blade.php
@extend('nav')
<breadcrumb>
<!-- breadcrumb content -->
</breadcrumb>
@yield('content')
home.blade.php
@extend('nav')
@section('content')
<home>
<!-- content -->
</home>
@endsection
about.blade.php
@extend('breadcrumb')
@section('content')
<about>
<!-- content -->
</about>
@endsection
Причина, по которой мне нравится этот формат, заключается в том, что он чрезвычайно элегантен (IMO), чтобы иметь возможность выбирать точку инъекции!
- У вас есть одна целевая страница... reference master
- Для главной страницы... ссылка nav
- Для любых подстраниц (about/nav/product) ссылка breadcrumb
Каскад макетов и 'content'
восстанавливается с помощью скомпилированного html
по мере его продвижения по дереву.
Возможно ли это? Я надеюсь избежать использования @include
в макетах, поскольку я лично считаю их громоздкими и немного озорными, особенно когда вы получаете элементы, которые повторяются часто, но не везде (панировочные сухари).
EDIT: на основе ответов.
В идеале 'content'
будет перестроен и пройден цепочку вложенных макетов. Если у вас есть домашняя страница, которая ссылается на nav.blade.php
, содержимое главной страницы добавляется в макет и компилируется. Затем, так как расположение макета навигации master.blade.php
, скомпилированный макет будет передан до master
и снова создан. Нет дублирования какого-либо контента.