2013-06-05 67 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); 

我更喜欢这种方法,因为视图决定了使用什么样的布局,而不是控制器 - 这可能会重新考虑因素。