Laravel - 返回View :: make vs $ layout

时间:2014-08-24 13:22:43

标签: php laravel laravel-4 blade

通常我在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所以看起来这里有重复。

我可能在这个技术上出了点问题。有人能帮助我理解它吗?

3 个答案:

答案 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)

重点是

  1. 无需在每个视图中指定@extends
  2. 可以单独呈现模板的内容部分,例如,用于AJAX模板或在多个布局中重复使用内容部分。
  3. 它是否真的是一种良好的做法,或者它是否能为你节省任何痛苦,这绝对是有争议的,但这就是背后的想法。

答案 2 :(得分:0)

我一直在询问IRC,看起来这实际上是来自Laravel 3,现在@extends是新的做事方式。因此,setupLayout似乎是一种遗留代码。所以我想我可以放心地忽略它。