# Templating ## Contents - [The Basics](#the-basics) - [Sections](#sections) - [Blade Template Engine](#blade-template-engine) - [Blade Layouts](#blade-layouts) ## The Basics Your application probably uses a common layout across most of its pages. Manually creating this layout within every controller action can be a pain. Specifying a controller layout will make your develompent much more enjoyable. Here's how to get started: #### Specify a "layout" property on your controller: class Base_Controller extends Controller { public $layout = 'layouts.common'; } #### Access the layout from the controllers' action: public function action_profile() { $this->layout->nest('content', 'user.profile'); } > **Note:** When using layouts, actions do not need to return anything. ## Sections View sections provide a simple way to inject content into layouts from nested views. For example, perhaps you want to inject a nested view's needed JavaScript into the header of your layout. Let's dig in: #### Creating a section within a view: #### Rendering the contents of a section: #### Using Blade short-cuts to work with sections: @section('scripts') @endsection @yield('scripts') ## Blade Template Engine Blade makes writing your views pure bliss. To create a blade view, simply name your view file with a ".blade.php" extension. Blade allows you to use beautiful, unobtrusive syntax for writing PHP control structures and echoing data. Here's an example: #### Echoing a variable using Blade: Hello, {{$name}}. #### Rendering a view:

Profile @include('user.profile') > **Note:** When using the **@include** Blade expression, the view will automatically inherit all of the current view data. #### Creating loops using Blade:

Comments

@foreach ($comments as $comment) The comment body is {{$comment->body}}. @endforeach #### Other Blade control structures: @if (count($comments) > 0) I have comments! @else I have no comments! @endif @for ($i =0; $i < count($comments) - 1; $i++) The comment body is {{$comments[$i]}} @endfor @while ($something) I am still looping! @endwhile #### The "for-else" control structure: @forelse ($posts as $post) {{ $post->body }} @empty There are not posts in the array! @endforelse ## Blade Layouts Not only does Blade provide clean, elegant syntax for common PHP control structures, it also gives you a beautiful method of using layouts for your views. For example, perhaps your application uses a "master" view to provide a common look and feel for your application. It may look something like this:
@yield('content')
Notice the "content" section being yielded. We need to fill this section with some text, so let's make another view that uses this layout: @layout('master') @section('content') Welcome to the profile page! @endsection Great! Now, we can simply return the "profile" view from our route: return View::make('profile'); The profile view will automatically use the "master" template thanks to Blade's **@layout** expression. Sometimes you may want to only append to a section of a layout rather than overwrite it. For example, consider the navigation list in our "master" layout. Let's assume we just want to append a new list item. Here's how to do it: @layout('master') @section('navigation') @parent
  • Nav Item 3
  • @endsection @section('content') Welcome to the profile page! @endsection Notice the **@parent** Blade construct? It will be replaced with the contents of the layout's navigation section, providing you with a beautiful and powerful method of performing layout extension and inheritance.