Laravel 4 控制器模板/刀片 - 正确的方法? [关闭]

Posted

技术标签:

【中文标题】Laravel 4 控制器模板/刀片 - 正确的方法? [关闭]【英文标题】:Laravel 4 Controller Templating / Blade - Correct method? [closed] 【发布时间】:2013-06-01 19:22:39 【问题描述】:

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

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

【问题讨论】:

如果上面的例子是否正确,请纠正我! 【参考方案1】:

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

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

【讨论】:

我同意,这是我一直在使用的那个,但我认为把这个问题放在这里可能会很好......谢谢。【参考方案2】:

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

【讨论】:

确实大部分内容可能来自数据库,但我认为您应该将生成的 Eloquent 模型传递给视图并在那里设置标题,而不是在控制器中抓取标题.您仍然可以传递内容的模型或设置内容(以及任何其他属性)。 你能举一个例子来说明你的意思 Aloys 吗? 这是我的建议(仍然可以使用 IoC 进行投注,但目前并不重要):paste.laravel.com/vre【参考方案3】:

我不喜欢他们中的任何一个。布局可能是 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);

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

【讨论】:

以上是关于Laravel 4 控制器模板/刀片 - 正确的方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 路由动态路由控制器到刀片模板

Laravel 刀片模板不使用 slug 渲染

Laravel 4刀片模板导致FatalErrorException?

Laravel 4刀片模板不会呈现整个页面

Laravel 4 上的刀片模板引擎语法问题

Laravel 无法扩展默认刀片模板