2013-06-05 5 views
23

私はLaravel 4のドキュメントを読んでおり、学習に役立つデモアプリケーションを作成しています。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 

上記のベストコンベンションおよび/または利点は何ですか?

+0

上記の例が正しいかどうかを正しく修正してください。 – Mediabeastnz

答えて

0

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

最終的には両方とも正しく、動作しますが、2番目の選択肢はより保守的です。

+0

私は同意します、それは私が使い続けているものですが、私はこの質問をここに置くのが良いかもしれないと思った...ありがとう。 – Mediabeastnz

0

私は、データベースから動的に生成されたタイトルを持つサイトがあるため、第1の方法が好きです。最初のメソッドを使用してタイトルを渡すのは簡単です。

+0

ほとんどのコンテンツはおそらくデータベースから来ると思われますが、結果的にEloquentモデルをビューに渡して、コントローラ内のタイトルを掻く代わりにタイトルを設定する必要があります。それでも、コンテンツのモデルを渡すか、コンテンツを設定します(ほかのプロパティと同様)。 – Aloys

+0

Aloysとは何ですか? – thestepafter

+0

これは私が提案するものです(まだIoCを使って賭けることができますが、それは今のところ重要ではありません):http://paste.laravel.com/vre – Aloys

1

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

私はこれがオプションであることをドキュメントに記載するべきだと思います。私は、コントローラ内の任意のレイアウト情報を格納しない

4

私は、私が使用して、コントローラにビューを返すために必要がある場合、私は

@extends('layouts.master') 

経由ビューに格納します。

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

私は、このアプローチは、ビューがどのレイアウトを使用するかを決定するものであり、コントローラーはリファクタリングの対象となります。

関連する問題