将变量提取到具有全局范围的模板中

时间:2013-03-21 14:09:08

标签: php

我想使用extract()函数将控制器中分配的所有变量提取到我的模板中。一个简单的例子就是:

  private function render() {
        extract($this->controller_vars);
        require_once("layout.php");
  }

问题是在我的layout.php中,我正在调用“包含”文件的其他方法,但更重要的是在布局中显示正确的操作/视图。

  // This method is called where I want to display the "content" page:
  public function display_action() {
        require_once("selected_action.php");
  }

所以我有效地访问了layout.php中提取的变量,但是我的视图/动作没有,因为它们是通过同一个控制器中的方法包含的。

是否有解决方法,我可以为提取的变量提供全局访问权限,或者为我的问题提供另一种解决方案?

其他信息:

上面的代码是我的视图类

中方法的2个“淡化”版本
  class views {

        private function render() {
              extract($this->controller_vars);
              require_once("layout.php");
        }


        public function display_action() {
              require_once("selected_action.php");
        }

  }

在layout.php文件中,我会调用如下:

  <div id="content_area">
        $this->display_action();
  </div>

更多更多

我目前可以通过名为$ this-&gt; controller_vars的视图类中的数组属性访问这些变量,因此如果我分配了一个用户列表,它将存储在$ this-&gt; controller_vars ['用户];我只是在寻找一种方法来提取它,以便我可以使用简单的$ users来访问它们,因为它们适用于$ this-&gt; controller_vars ['users']

1 个答案:

答案 0 :(得分:0)

我知道这不是一个直接的答案,但你可能想要考虑“以'面向对象”。如果您创建了控制器和操作对象,它们仍然可以或多或少地以相同的方式包含/需要(使用autoloader),并且您可以通过例如传递变量将它们传递给它们。构造函数。

这样的事情:

Class Layout {
    public function processAction() {
        $class = 'Action' . $selected_action;
        $Controller = new $class( $this->controller_vars );
    }
}