2013-03-21 101 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