【问题标题】:Laravel 4 Controller Templating / Blade - Correct method? [closed]Laravel 4 控制器模板/刀片 - 正确的方法? [关闭]
【发布时间】: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

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

【问题讨论】:

  • 如果上面的例子是否正确,请纠正我!

标签: views laravel laravel-4 conventions blade


【解决方案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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 2023-03-26
      • 2016-07-13
      • 2014-05-10
      • 2018-08-15
      • 2013-06-03
      • 2013-05-08
      • 2015-02-17
      相关资源
      最近更新 更多