我尝试了几乎所有东西,但我无法让以下内容运行。
<?php
class BaseController extends Controller {
// Define frontpage layout manager
protected $layout = '';
public function __construct() {
parent::__construct();
$theme = Theme::where('enabled', '=', true)->first();
// HERE !! : This never changes the value of $layout class var
$this->layout = View::make('themes.front.' . $theme->folder . '.master');
// I also tried without View::make(..)
// I also checked that $theme returns something and it does return a theme
}
/**
* Setup the layout used by the controller.
*
* @return void
*/
protected function setupLayout()
{
if ( ! is_null($this->layout))
{
$this->layout = View::make($this->layout);
}
}
}
我根本无法在构造函数中更改$ layout的值。我需要这个允许用户在布局之间切换。
答案 0 :(得分:0)
所以我想要实现的是:我将有多个布局(模板),我将允许用户通过管理更改这些模板,因此我需要一种快速简便的方法来操作protected $layout
值。
将我的代码放在__constructor() {}
中的问题是setupLayout()
会覆盖它,因此错误就像找不到布局一样。
所以有两种解决方案:
1)在每个子控制器中声明布局
这意味着扩展基本控制器的每个控制器都在其自己的protected $layout
方法中定义它自己的__constructor() {}
。但是,如果您的所有页面共享相同的模板,则这是非常重复的。
2)Maniuplate setupLayout()方法
由于我的所有页面共享相同的布局,而且我知道certian总是至少有一个模板,我只能将setupLayout()
方法改为:
function setupLayout()
{
$theme = Theme::where('enabled', '=', true)->first();
$this->layout = 'themes.front.' . $theme->folder . '.master';
}