无法通过构造函数设置布局

时间:2013-10-03 19:28:27

标签: php laravel laravel-4

我尝试了几乎所有东西,但我无法让以下内容运行。

<?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的值。我需要这个允许用户在布局之间切换。

1 个答案:

答案 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';
}