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 控制器模板/刀片 - 正确的方法? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章