私は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
上記の最良の慣習および/または利点は何ですか?
レイアウト情報をコントローラーに保存しません。ビューに保存します。
@extends('layouts.master')
私が使用するコントローラーでビューを返す必要がある場合:
return \View::make('examples.foo')->with('foo', $bar);
ビューが使用するレイアウトを決定し、コントローラーではなく、リファクタリングの対象となるため、このアプローチを好みます。
私はどちらも好きではありません。レイアウトはおそらくLaravelの最も奇妙な部分です。コントローラのバージョンは実際には意味がありません。その場合、コントローラーのすべてのメソッドはそのビューを必要とします。 @yieldバージョンは定型文の混乱です。私はこの「メソッド固有のレイアウト」を作成しました。
public function index()
{
return View::make('layouts.main', [
'layout_data' => 'sup'
])->nest('content', 'welcome', [
'view_data' => 'sup'
]);
}
これはオプションであるとドキュメントで言及する必要があると思います。
ビューとコントローラーコードがより明確に分離されているため、2番目のものをお勧めします。タイトルは、ウェルカムビューとウェルカムタイトルを毎回組み合わせるのではなく、コンテンツビューのプロパティであることが私にはより論理的に思えます。
結局、両方とも正しく、機能しますが、2番目の選択肢はより保守可能です。
一部のサイトにはデータベースから動的に生成されたタイトルがあるため、私は最初の方法を好みます。最初の方法を使用すると、タイトルを渡すのは簡単です。