От http://laravel.com/docs/4.2/templates :
(контроллер)
class UserController extends BaseController {
/**
* The layout that should be used for responses.
*/
protected $layout = 'layouts.master';
/**
* Show the user profile.
*/
public function showProfile()
{
$this->layout->content = View::make('user.profile');
}
}
(шаблон)
@extends('layouts.master')
@section('sidebar')<p>This is appended to the master sidebar.</p>
@stop
@section('content')
<p>This is my body content.</p>
@stop
Почему layouts.master
нужно позвонить дважды? Дело в том, что $this->layout
должен быть установлен в layouts.master
и тот факт, что вам нужно пройти layouts.master
в @extends()
кажется … излишним и ненужным.
Это достаточно в вашем showProfile()
метод поставить:
return View::make('user.profile');
вместо:
protected $layout = 'layouts.master';
а также
$this->layout->content = View::make('user.profile');
РЕДАКТИРОВАТЬ
Еще один метод при использовании $layout
Свойство немного сложнее.
В layouts.master
шаблон, который вы не используете yield('content')
но ты положил {{ $content }}
как переменная, поэтому файл может выглядеть так:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
test
{{ $content }}
test2
{{ $sidebar }}
</body>
</html>
Теперь вы можете иметь собственность, как и раньше:
protected $layout = 'layouts.master';
и что вам нужно, это установить что-то content
а также sidebar
переменные, использующие:
$this->layout->content = 'this is content';
$this->layout->sidebar = 'this is sidebar';
макет будет отображаться автоматически
Конечно, в вышеупомянутых 2 случаях вы можете использовать шаблоны использования, чтобы вы могли использовать:
$this->layout->content = View::make('content');
$this->layout->sidebar = View::make('sidebar');
И иметь в этом файле определенный контент без @section
например:
content.blade.php
this is content
sidebar.blade.php
this is sidebar
Выход для этого будет:
test this is content test2 this is sidebar
Этот метод для меня намного сложнее. Я использую всегда return View::make('user.profile');
и определили мой шаблон, как вы показали в начале (расширяя другой шаблон с @section
выложить туда свой контент)
Других решений пока нет …