23

我一直在阅读 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

上述最佳约定和/或优势是什么?

4

4 回答 4

5

我不在控制器中存储任何布局信息,我将其存储在视图中

@extends('layouts.master')

当我需要在控制器中返回视图时,我使用:

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

我更喜欢这种方法,因为视图决定了要使用的布局,而不是控制器——它需要重构。

于 2014-02-06T09:49:11.657 回答
1

我不喜欢他们中的任何一个。布局可能是 Laravel 中最奇怪的部分。控制器版本实际上没有意义;然后控制器的所有方法都需要该视图。@yield 版本是一堆样板文件。我编造了这个“特定于方法的布局”:

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

我认为应该在文档中提到这是一个选项。

于 2013-07-28T22:41:55.530 回答
0

我更喜欢第二个,因为它显示了您的视图和控制器代码之间的更清晰的分离。在我看来,标题将是内容视图的属性,而不是每次都将您的欢迎视图与您的欢迎标题结合起来,这似乎更合乎逻辑。

最后两者都是正确的并且可以工作,但第二种选择更易于维护。

于 2013-06-05T22:43:13.490 回答
0

我更喜欢第一种方法,因为某些站点具有从数据库动态生成的标题。使用第一种方法很容易传递标题。

于 2013-06-06T02:49:28.760 回答