我想使用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']
答案 0 :(得分:0)
我知道这不是一个直接的答案,但你可能想要考虑“以'面向对象”。如果您创建了控制器和操作对象,它们仍然可以或多或少地以相同的方式包含/需要(使用autoloader),并且您可以通过例如传递变量将它们传递给它们。构造函数。
这样的事情:
Class Layout {
public function processAction() {
$class = 'Action' . $selected_action;
$Controller = new $class( $this->controller_vars );
}
}