在一个控制器中使用多个布局

时间:2013-10-25 17:36:41

标签: php laravel

我可以使用protected $layout = 'layouts.mylayout';来定义Laravel在使用$this->layout->content = View::make('myview');时应该使用哪种布局,但如果我需要在同一个控制器中使用多个布局,我该怎么办?

2 个答案:

答案 0 :(得分:1)

这个解决方案怎么样? 您可以在控制器方法中覆盖layout属性,为其提供内容,等等...... 响应自动返回。

要注意,请确保您的控制器扩展BaseController,其中包含setupLayout方法。 如果没有扩展,请在控制器内部实现setupLayout

<?php

class UsersController extends BaseController
{

    protected $layout = 'users.layout.main';

    public function getList()
    {
        $this->layout->content = View::make('users.list');
    }

    public function getDetail()
    {
        $this->layout = View::make('users.layout.detail');

        $this->layout->content = View::make('users.detail');
    }
}

答案 1 :(得分:0)

您似乎无法使用protected $layout执行此操作。但是你有很多选择。

一种是将布局名称传递给您的视图:

class TestController extends BaseController {

    public function index()
    {

        return View::make('myview', ['layout' => 'layouts.mylayout']);

    }

    public function show()
    {

        return View::make('myview', ['layout' => 'layouts.mySecondLayout']);

    }

    public function create()
    {

            /// this one will use your default layout

        return View::make('myview');

    }

}

@extends myview.blade.php@extends( isset($layout) ? $layout : Config::get('app.layout') ) @section('content') Here goes your content @stop 中的布局:

<html><body>

    THIS IS YOUR LAYOUT 1

    @yield('content')

</body></html>

你的布局应该是

return array(

    'layout' => 'layouts.master',

    ...

);

此外,在app / config / app.php中,您必须配置默认布局:

{{1}}