2013-03-21 89 views
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' ]。我正在寻找一种方法来提取它,以便我可以通过简单的$用户访问它们$ as-> controller_vars ['users']

+0

这是Opencart的代码? – Pacerier 2014-10-09 12:09:54

回答

0

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

事情是这样的:

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

对不起,它是OOP,我只是粘贴了我用来减少问题大小的具体方法,所有这些方法都位于我的视图类 – mauzilla 2013-03-21 14:15:59

+0

啊对,我刚注意到可见性关键字。在这种情况下,我认为实现这一点只会更容易。 – Rijk 2013-03-21 14:18:19

+0

在这个时候,我可以通过执行$ this-> controller_vars ['assigned_variable']来访问变量。但我只是寻找一种更简单的方法,不必正确使用它,而只需将它作为$ assigned_variable(例如,我从数据库中获取了一组用户,看起来更容易做print_r($ users);如同print_r($ this-> controller_vars ['users']); – mauzilla 2013-03-21 14:21:21