web-dev-qa-db-ja.com

Laravel 4コントローラーテンプレート/ブレード-正しい方法ですか?

私はLaravel 4のドキュメントを読み、学習に役立つデモアプリケーションを作成しています。

ブレードとコントローラーを使用したビューのテンプレートに関するドキュメントはあまり見つかりませんでした。どちらが正しい方法ですか、それとも個人的な好みになりますか?

例:1

Controllers/HomeController.php

protected $layout = 'layouts.main';

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

Views/layouts/main.blade.php

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

Views/welcome.blade.php

<p>Welcome.</p>

例2

Controllers/HomeController.php

protected $layout = 'layouts.main';

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

Views/layouts/main.blade.php

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

Views/welcome.blade.php

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

上記の最良の慣習および/または利点は何ですか?

23
Mediabeastnz

レイアウト情報をコントローラーに保存しません。ビューに保存します。

@extends('layouts.master')

私が使用するコントローラーでビューを返す必要がある場合:

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

ビューが使用するレイアウトを決定し、コントローラーではなく、リファクタリングの対象となるため、このアプローチを好みます。

4
SamV

私はどちらも好きではありません。レイアウトはおそらくLaravelの最も奇妙な部分です。コントローラのバージョンは実際には意味がありません。その場合、コントローラーのすべてのメソッドはそのビューを必要とします。 @yieldバージョンは定型文の混乱です。私はこの「メソッド固有のレイアウト」を作成しました。

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

これはオプションであるとドキュメントで言及する必要があると思います。

1
Farzher

ビューとコントローラーコードがより明確に分離されているため、2番目のものをお勧めします。タイトルは、ウェルカムビューとウェルカムタイトルを毎回組み合わせるのではなく、コンテンツビューのプロパティであることが私にはより論理的に思えます。

結局、両方とも正しく、機能しますが、2番目の選択肢はより保守可能です。

0
Aloys

一部のサイトにはデータベースから動的に生成されたタイトルがあるため、私は最初の方法を好みます。最初の方法を使用すると、タイトルを渡すのは簡単です。

0
thestepafter