Laravel 如何在同一控制器内使用多个布局?

Laravel 如何在同一控制器内使用多个布局?,laravel,laravel-4,Laravel,Laravel 4,我想问,如何在Laravel中为同一控制器定义多个布局。 这里的场景如下所示: 我有一个主控制器,在这个控制器中有两个动作,一个叫做步骤,另一个叫做登录 我希望他们两个加载不同的布局 我使用的方法如下: protected$layout=“layouts.page”; 公共职能指数() { //进入网站制作步骤页面 $this->layout->content=View::make('steps'); } 我可以定义多个布局吗?可能传递一个数组,如下所示: protected$layout=a

我想问,如何在Laravel中为同一控制器定义多个布局。 这里的场景如下所示:

我有一个主控制器,在这个控制器中有两个动作,一个叫做步骤,另一个叫做登录

我希望他们两个加载不同的布局

我使用的方法如下:

protected$layout=“layouts.page”;
公共职能指数()
{
//进入网站制作步骤页面
$this->layout->content=View::make('steps');
}
我可以定义多个布局吗?可能传递一个数组,如下所示:

protected$layout=array('first'=>“layouts.page”、'second'=>“layouts.second”);
使用或查看将子视图传递到下视图的部分

还可以为在中定义的布局指定多个截面

编辑:

如果要为来自同一控制器的不同视图定义主布局,请在视图上定义布局。看看这一节

@extends
用于定义视图本身的布局


希望这对您所寻找的内容有所帮助。

最佳解决方案是创建一种生成视图的方法,嵌套多重布局:

return View::make('layouts.master', array())
       ->nest('section_one', YOUR_SECOND_MASTER, array())
       ->nest...

停止使用布局设置受保护的$layout。

这不是常见做法,我还没有测试过,但值得一试

在控制器的方法中:

$this->layout = View::make('layouts.master1");
如果查看控制器可能扩展的,您将看到布局变量最终只是作为任何旧视图的结果使用

换句话说,您的
$layout
变量只是一个视图。您可以在控制器中创建任何
$layout
变量:

<?php

class MyController extends BaseController {

    protected $layout;

    protected $layout_alt;

    // Here we're over-riding setupLayout() from
    // the BaseController
    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }

        if ( ! is_null($this->layout_alt))
        {
            $this->layout_alt = View::make($this->layout_alt);
        }

    }

}

当然,正如Abishek R Srikanth指出的那样,可能性是无穷的。你也可以用Blade做一些奇特的事情:D

我这样做的方式与@fideloper的答案非常相似

protected $layout;
private $_layout = null;

public function __construct()
{

}

private function _setupLayout()
{
    if ( ! is_null($this->_layout))
    {
        $this->layout = View::make($this->_layout);
    }
}

public function home() {
    $this->_layout = 'layouts.1col_public';
    $this->_setUpLayout();
    $this->layout->content = View::make('static/home');
}

public function about() {
    $this->_layout = 'layouts.2col_public';
    $this->_setUpLayout();
    $this->layout->active_menu = 'about';
    $this->layout->content = View::make('static/default');
}
我就是这样做到的

$this->layout = View::make('layout.master');
$this->layout->content = View::make('step.demo')

你能详细说明你所说的多重布局是什么意思吗?从上面的问题来看,你似乎想要多重主布局。是吗?是的,我想要多个主布局在什么情况下,一个视图需要多个布局?我想要为名为
步骤的主控制器执行一个操作,该主控制器具有一个布局和另一个布局,用户可以登录到同一主控制器,这是一种好的做法吗?您可以使用
@extends
直接在视图上执行此操作。为什么要在控制器上定义它。在控制器上定义布局不是一个好的做法。保持视图仅对其数据依赖于控制器是一种更好的做法。
$this->layout = View::make('layout.master');
$this->layout->content = View::make('step.demo')