3

我想使用 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->controller_vars 的数组属性访问这些变量,所以如果我分配了一个用户列表,它将存储在 $this->controller_vars['users']; 我只是在寻找一种提取它的方法,以便我可以使用简单的 $users 访问它们,就像 $this->controller_vars['users']

4

1 回答 1

0

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

像这样的东西:

Class Layout {
    public function processAction() {
        $class = 'Action' . $selected_action;
        $Controller = new $class( $this->controller_vars );
    }
}
于 2013-03-21T14:14:12.463 回答