通常我在Laravel中管理我的布局:
视图/ index.blade.php
<html>
<body>
@yield('content')
</body>
</html>
视图/主/ root.blade.php
@extends('index')
@section('content')
<p>whatever</p>
@stop
控制器/ MainController.php
class MainController extends \BaseController {
public function root(){
return View::Make('main.root');
}
}
现在我正在阅读$ layout变量。文档说:
您的应用程序可能在大多数应用程序中使用通用布局 页面。在每个控制器操作中手动创建此布局 可能是一种痛苦。指定控制器布局将使您的 发展更愉快
但我不明白这是如何让它变得更加愉快。
这是相同的代码,但使用$ layout变量:
控制器/ MainController.php
class MainController extends \BaseController {
public $layout = "index";
public function root(){
$this->layout->nest('content', 'main.root');
}
}
现在,这怎么容易?对我来说似乎更多的代码。此外,我已经说过root
刀片扩展index
所以看起来这里有重复。
我可能在这个技术上出了点问题。有人能帮助我理解它吗?
答案 0 :(得分:1)
如果您设置了BaseController :(如果Laravel存在,则自动调用setupLayout()
)
class BaseController extends Controller {
protected $layout = 'layouts.master';
protected function setupLayout()
{
$this->layout = View::make($this->layout);
}
}
您只需将@section()
名称指定为媒体资源,而无需@extend()
您的观看次数。和/或覆盖从BaseController继承的布局。
class MainController extends \BaseController {
public function index(){
$this->layout->content = View::make('main.index');
}
}
在您看来:
@section('content')
<div class="row-fluid">
Test
</div>
@stop
在主版面中:
@yield('content')
答案 1 :(得分:1)
重点是
@extends
它是否真的是一种良好的做法,或者它是否能为你节省任何痛苦,这绝对是有争议的,但这就是背后的想法。
答案 2 :(得分:0)
我一直在询问IRC,看起来这实际上是来自Laravel 3,现在@extends是新的做事方式。因此,setupLayout
似乎是一种遗留代码。所以我想我可以放心地忽略它。