0

Laravel で同じコントローラーに複数のレイアウトを定義する方法を知りたいと思いました。ここでのシナリオは次のようなものです。

私はコントローラーホームを持っており、このコントローラーには2つのアクションがあり、1つはステップと呼ばれ、もう1つはログインと呼ばれます。

両方に異なるレイアウトをロードしたい。

私がこれを作成するために使用した方法は次のとおりです。

protected $layout = "layouts.page";

public function index()
{
    // Get to the page of the website making steps
    $this->layout->content = View::make('steps');
}

複数のレイアウトを定義できますか? 次のように配列を渡す場合があります。

protected $layout = array('first' => "layouts.page", 'second' => 'layouts.second');
4

6 に答える 6

3

最善の解決策は、複数のレイアウトをネストして、ビューを生成するメソッドを作成することです。

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

レイアウトで設定を停止protected $layoutします。

于 2013-08-12T11:25:25.993 に答える
3

私はこのようにして達成します

$this->layout = View::make('layout.master');
$this->layout->content = View::make('step.demo')
于 2015-03-30T04:56:29.243 に答える
2

View Composersを使用するか、サブビューをhttp://laravel.com/docs/responses#viewsの下のビューに渡すセクションを見てください。

http://laravel.com/docs/templates#blade-templatingで定義されているレイアウトに複数のセクションを指定することもできます

編集:

同じコントローラーから異なるビューのマスター レイアウトを定義する場合は、ビュー自体でレイアウトを定義します。「ブレード レイアウトの使用」セクションをご覧ください。

@extends、ビュー自体のレイアウトを定義するために使用されます。

これがあなたが探しているものに役立つことを願っています.

于 2013-08-12T11:03:56.723 に答える
1

これを行う方法は、@ 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');
}
于 2013-11-08T11:29:16.760 に答える
0

これは一般的な方法ではなく、まだテストしていませんが、試してみる価値はあります。

コントローラーのメソッドで:

$this->layout = View::make('layouts.master1");
于 2013-08-12T13:39:30.230 に答える