Php Laravel-返回视图::make vs$layout

Php Laravel-返回视图::make vs$layout,php,laravel,laravel-4,blade,Php,Laravel,Laravel 4,Blade,通常,我在Laravel中管理布局,如下所示: 视图/index.blade.php <html> <body> @yield('content') </body> </html> @extends('index') @section('content') <p>whatever</p> @stop class MainController extends \BaseContro

通常,我在Laravel中管理布局,如下所示:

视图/index.blade.php

<html>
    <body>
        @yield('content')
    </body>
</html>
@extends('index')

@section('content')
    <p>whatever</p>
@stop
class MainController extends \BaseController {

    public function root(){
        return View::Make('main.root');
    }

}
class MainController extends \BaseController {

    public $layout = "index";

    public function root(){
        $this->layout->nest('content', 'main.root');
    }

}
现在我正在阅读有关$layout变量的文章。文件说:

您的应用程序可能在其大部分应用程序中使用通用布局 页。在每个控制器操作中手动创建此布局 可能是一种痛苦。指定控制器布局将使 发展更令人愉快

但我看不出这怎么会让它更有趣

这是相同的代码,但使用$layout变量:

controllers/MainController.php

<html>
    <body>
        @yield('content')
    </body>
</html>
@extends('index')

@section('content')
    <p>whatever</p>
@stop
class MainController extends \BaseController {

    public function root(){
        return View::Make('main.root');
    }

}
class MainController extends \BaseController {

    public $layout = "index";

    public function root(){
        $this->layout->nest('content', 'main.root');
    }

}
现在,这怎么容易呢?对我来说,这似乎更像是代码。此外,我已经说过,
root
blade扩展了
index
,所以这里似乎有重复


我可能对这项技术有点误解。有人能帮我理解一下吗?

如果你设置了BaseController:(如果存在,Laravel会自动调用
setupLayout()

您只需将
@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')
关键是

  • 不必在每个视图中指定
    @extends
  • 可以单独呈现模板的内容部分,例如AJAX模板,或者在多个版面中重复使用内容部分

  • 无论这是否是一个好的实践,或者它是否能帮你省去任何痛苦,这都是有争议的,但这就是它背后的想法。

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

    这并不像你解释的那样有效。。。我有个错误,你有什么错误?答案的代码在我看来很好。当然,只是添加了视图。我还回答了一些可能有用的问题,因为这是关于类似的事情。