избыточность в шаблонном движке Laravel?

От 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() кажется … излишним и ненужным.

1

Решение

Это достаточно в вашем 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 выложить туда свой контент)

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]