2013-06-05 96 views
23

我一直在閱讀Laravel 4文檔,並且一直在製作演示應用程序來幫助學習。Laravel 4控制器模板/刀片 - 正確的方法?

我無法找到有關使用刀片和控制器進行視圖模板化的大量文檔。 哪一個是正確的方法還是歸結爲個人偏好?

E.g. 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> 

E.g. 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

我喜歡第二個,因爲它顯示了你的視圖和控制器代碼之間的更清晰的分離。對我來說,標題似乎更符合內容視圖的屬性,而不是每次將歡迎視圖與歡迎標題相結合。

最後,兩者都是正確的,並將工作,但第二個選擇是更易於維護。

+0

我同意,這是我繼續使用的,但我認爲這可能是很好的把這個問題放在這裏...謝謝。 – Mediabeastnz

0

我更喜歡第一種方法,因爲有些網站從數據庫中有一個動態生成的標題。使用第一種方法很容易通過標題。

+0

這是事實,大多數內容將可能來自於一個數據庫,但我想你應該有通過所產生的雄辯模型視圖,設置標題,而不是在你的控制器的稱號刮。您仍然可以通過內容模型或設置內容(以及任何其他屬性)。 – Aloys

+0

你能舉個例子說明你的意思嗎? – thestepafter

+0

這就是我所建議的(仍然可以使用IoC進行投注,但現在並不重要):http://paste.laravel.com/vre – Aloys

1

我不喜歡他們中的任何一個。佈局可能是Laravel最奇怪的部分。控制器版本沒有意義;控制器的所有方法都需要該視圖。 @yield版本是一堆樣板文件。我提出了這個「方法的具體佈局」:

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

我認爲它應該在文檔中提到,這是一個選項。

4

我不控制器的任何佈局信息存儲,我通過

@extends('layouts.master') 

其存儲在視圖當我需要在控制器我用返回一個觀點:

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

我更喜歡這種方法,因爲視圖決定了使用什麼樣的佈局,而不是控制器 - 這可能會重新考慮因素。