2013-04-29 33 views
0

在我的控制器中,我想設置一些值並使它們在應用程序中的不同視圖中存在(或活動)。確保整個應用程序中存在變量

我在某處閱讀我需要使用beforeFilter函數,但我不確定這是否正確以及我如何去做。

所以在我的控制器,我想有

public function page1() { 
    $this->Model->setId('123'); 
} 

public function page2() { 
    $this->Model->getId(); // would able to get the Id that was set from page1 function 
    $this->Model->setName('Bob'); 
} 

public function page3() { 
    $this->Model->getId(); 
    $this->Model->getName(); 
} 

讓我知道如果你有問題。

+0

您應該提供一些更多的背景信息,說明您爲什麼要這樣做,以及您想要解決什麼問題。儘管這是可能的,但在MVC應用程序中並不常見,如果您是CakePHP和/或MVC的新手,那麼您很可能會在應用程序設計級別上做錯某些事情。 – 2013-04-29 23:17:34

+0

您是否正在尋找一種方式在整個應用程序中登錄用戶和身份(使用該用戶屬性)? – thaJeztah 2013-04-30 07:05:12

+0

那麼在我的應用程序中,更多的是嚮導,其中每個視圖都在查詢一個表(通過SOAP WSDL)。它輸出一個表並提供一個鏈接,以便用戶點擊它,以便在下一個視圖中查詢另一個表或插入日期。因此,有些變量需要在整個應用程序中保持活躍狀態​​,直到用戶到達他們所在的嚮導的最後一頁。 – MCHam 2013-04-30 14:32:01

回答

1

要在整個視圖中擁有這種「持久性」,我想最簡單的方法就是會話。請注意,使用您提供的代碼(我知道這不是一個工作示例),您希望變量在模型中保持持久性,但不會在同一控制器(或其他控制器)的操作之間維護相同的模型那件事)。例如,您需要在會話中設置該變量,並在您想要使用它時或在數據庫中創建方法並在模型中創建方法以獲取最後插入的標識。

所以,你的代碼會像

public function page1() { 
    $this->Session->write('id', '123'); 
} 

public function page2() { 
    $this->Session->read('id'); 
    $this->Session->write('name', 'Bob'); 
} 

public function page3() { 
    $this->Session->read('id'); 
    $this->Session->read('name'); 
} 
0

有一個返回所有數據在陣列狀

return array('varName' => $value, 'varName2' => $value2); 

單一模型的方法,然後您還可以從過濾器前控制器這種模型方法並簡單地做

$this->set(ClassRegistry::init('MyModel')->commonViewVars()); 

如果你會描述你的想法你ne編輯做,我可以給你一個更好的建議,例如使用requestAction(),這可能是另一種選擇,取決於你想要做什麼。

根據你想傳遞給每個頁面的數據,你應該考慮緩存它。如果其菜單例如將其「永久」緩存,並且只是在菜單更改時更新緩存。

+0

那麼在我的應用程序中,更多的是嚮導,每個視圖所做的是查詢一個表格(通過SOAP WSDL)。它在那裏輸出一個表並提供一個鏈接,以便用戶點擊它,因此在下一個視圖中,它將查詢另一個表或插入數據。出於這個原因,一些變量需要在整個應用程序中保持活躍狀態​​,直到用戶到達他們所在的嚮導的最後一頁。 – MCHam 2013-04-30 14:35:57

相關問題