0

我几乎尝试了所有方法,但我无法运行以下命令。

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

4

1 回答 1

0

所以我想要实现的是:我将有多个布局(模板),并且我将允许用户通过管理更改这些模板,因此我需要一种快速简便的方法来操纵protected $layout值。

放入我的代码的问题__constructor() {}是它setupLayout()会覆盖它,因此会出现错误,因为没有找到布局。

所以有两种解决方案:

1)在每个子控制器中声明布局
意味着扩展基本控制器的每个控制器都protected $layout在它自己的__constructor() {}方法中定义它自己的。但是,如果您的所有页面共享相同的模板,则这是非常重复的。

2) 操作 setupLayout() 方法
因为我所有的页面都共享相同的布局,而且我知道对于 certian,总会有至少一个模板,我可以简单地将setupLayout()方法更改为:

function setupLayout()
{
    $theme = Theme::where('enabled', '=', true)->first();
    $this->layout = 'themes.front.' . $theme->folder . '.master';
}
于 2013-10-05T10:08:04.070 回答