Creating layout pages
One of the primary benefits of using Blade are template inheritance. It allows a developer to create layout files that will hold common layout elements and extend them to other view templates.
Defining a Layout
The first step to using template inheritance to define a layout. The "master" layout will likely contain typical HTML mark-up, but will also include two Blade directives @section
and @yield
. The @section
directive defines a section of content, while the @yield
directive is used to display the contents of a given section. The @show
directive is used to end a defined section and immediately yield or display the section.
<!-- Stored in resources/views/layouts/app.blade.php -->
<html>
<head>
<title>App Name - @yield('title')</title>
</head>
<body>
@section('sidebar')
This is the master sidebar.
@show
<div class="container">
@yield('content')
</div>
</body>
</html>
Extending a Layout
When extending a "master" layout, the child view will use the @extends
directive to specify which layout the it should "inherit". Views which extend a Blade layout may inject content into the layout's sections using @section
directives. Remember, as seen in the example above, the contents of these sections will be displayed in the layout using @yield
:
<!-- Stored in resources/views/child.blade.php -->
@extends('layouts.app')
@section('title', 'Page Title')
@section('sidebar')
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
<p>This is my body content.</p>
@endsection
In this example, the sidebar section is utilizing the @parent
directive to append (rather than overwriting) content to the layout's sidebar. The @parent
directive will be replaced by the content of the layout when the view is rendered. In the above example, @endsection
is used instead of @show
. Using @endsection
means that the section will be defined, but not yielded.