0

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

4

2 回答 2

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');
    }
}
于 2013-10-27T11:32:37.230 回答
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>

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

return array(

    'layout' => 'layouts.master',

    ...

);
于 2013-10-25T17:46:11.617 回答