Reputation: 3227
I can use protected $layout = 'layouts.mylayout';
to define which layout Laravel should use when using $this->layout->content = View::make('myview');
but what should i do if i need to use multiple layouts in the same controller?
Upvotes: 0
Views: 129
Reputation: 22872
What about this solution?
You can override layout
property in controllers method, assing content to it, etc...
Response is returned automaticaly.
To note, be sure your controller extends BaseController
which contains setupLayout
method.
If it does not extend, implement setupLayout
inside of your controller.
<?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');
}
}
Upvotes: 1
Reputation: 87799
Looks like you cannot do it using protected $layout
. But you have many options.
One is to pass the layout name to your view:
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');
}
}
And @extends
your layout in your myview.blade.php
:
@extends( isset($layout) ? $layout : Config::get('app.layout') )
@section('content')
Here goes your content
@stop
And your layout should be something like
<html><body>
THIS IS YOUR LAYOUT 1
@yield('content')
</body></html>
Also, in your app/config/app.php you will have to configure your default layout:
return array(
'layout' => 'layouts.master',
...
);
Upvotes: 0