Laravel 4 Controller Templating/Blade – правильный метод?

Я прочитал документацию по Laravel 4 и сделал демонстрационное приложение, чтобы помочь в обучении.

Я не смог найти много документации по шаблонам представлений с блейд-сервером и контроллерами. Какой метод правильный или все зависит от личных предпочтений?

Например. 1

Контроллеры/HomeController.php

protected $layout = 'layouts.main';

public function showWelcome()
{
    $this->layout->title = "Page Title";
    $this->layout->content = View::make('welcome');
}

Виды/макеты/main.blade.php

<html>
<head>
    <title>{{ $title }}</title>
</head>
<body>
    {{ $content }}
</body>
</html>

Просмотры/welcome.blade.php

<p>Welcome.</p>

Например. 2

Контроллеры/HomeController.php

protected $layout = 'layouts.main';

public function showWelcome()
{
    $this->layout->content = View::make('welcome');
}

Виды/макеты/main.blade.php

<html>
<head>
    <title>@yield('title')</title>
</head>
<body>
    @yield('content')
</body>
</html>

Просмотры/welcome.blade.php

@section('title', 'Welcome')
@section('content')
// content
@stop

Каковы наилучшие соглашения и / или преимущества вышеперечисленного?


person mylesthe.dev    schedule 05.06.2013    source источник
comment
Пожалуйста, поправьте меня, если приведенные выше примеры также неверны!   -  person mylesthe.dev    schedule 06.06.2013


Ответы (4)


Я не храню информацию о макете в контроллере, я храню ее в представлении через

@extends('layouts.master')

Когда мне нужно вернуть представление в контроллере, я использую:

return \View::make('examples.foo')->with('foo', $bar);

Я предпочитаю этот подход, поскольку вид определяет, какой макет использовать, а не контроллер, который подлежит рефакторингу.

person SamV    schedule 06.02.2014

Мне не нравится ни один из них. Макеты, пожалуй, самая странная часть Laravel. Версия с контроллером на самом деле не имеет смысла; все методы контроллера требуют этого представления. Версия @yield представляет собой беспорядок шаблонного кода. Я составил этот «макет для конкретного метода»:

public function index()
{
    return View::make('layouts.main', [
        'layout_data' => 'sup'
    ])->nest('content', 'welcome', [
        'view_data' => 'sup'
    ]);
}

Я думаю, что в документах следует упомянуть, что это вариант.

person Farzher    schedule 28.07.2013

Я предпочитаю второй, потому что он показывает более четкое разделение между вашим представлением и кодом контроллера. Мне кажется более логичным, чтобы заголовок был свойством представления контента, а не каждый раз комбинировал ваш приветственный вид с вашим приветственным заголовком.

В конце концов, оба варианта верны и будут работать, но второй вариант более удобен в сопровождении.

person Aloys    schedule 05.06.2013
comment
Я согласен, это тот, который я продолжал использовать, но я подумал, что было бы неплохо задать этот вопрос здесь... Спасибо. - person mylesthe.dev; 06.06.2013

Я предпочитаю 1-й способ, так как некоторые сайты имеют динамически генерируемый заголовок из базы данных. Легко передать заголовок, используя первый метод.

person thestepafter    schedule 06.06.2013
comment
Это правда, что большая часть контента, вероятно, будет поступать из базы данных, но я думаю, что вам следует передать полученные модели Eloquent в представление и установить там заголовок вместо очистки заголовка в вашем контроллере. Вы все равно должны передать модель для содержимого или также установить содержимое (а также любое другое свойство). - person Aloys; 06.06.2013
comment
Можете ли вы привести пример того, что вы имеете в виду, Алоис? - person thestepafter; 07.06.2013
comment
Вот что я предлагаю (все еще можно делать ставки с использованием IoC, но сейчас это не важно): paste.laravel. com/vre - person Aloys; 07.06.2013