2010-03-16 49 views
1

我有一個元素用於從我的layouts/default.ctp文件調用我的側欄導航,我需要從我的Photos控件中訪問一些關於類別的數據。我會如何去做這件事?從一個元素訪問控制器數據

回答

1

您只需把您的layous/default.thtml中作爲一個正常的模板,並把

<?php echo $this->element('your element'); ?> 

在你需要它。

b.t.w,使用方法:

$data = $this->requestAction('controller/action'); 

訪問數據

+0

對不起,也許我應該澄清。我正在使用<?php echo $ this-> element('side_nav'); ?>在我的layouts/default.ctp中我需要獲取該元素,在'elements/side_nav.ctp'中訪問從Photos控制器檢索的數據。 – trobrock 2010-03-16 02:55:37

+0

@ trobrock,你有沒有試過使用: 「$ data = $ this-> requestAction('photos/someaction');」在元素中獲取數據? – Young 2010-03-16 03:08:04

+0

我沒有,我會嘗試。對不起,我錯誤地閱讀了你的答案 – trobrock 2010-03-16 03:34:04

-1

爲什麼你不只是做標準的蛋糕約定呢?

在控制器中,

$這個 - >設置( '類',$這個 - > Photos->找到(...));

2

請注意requestAction,除非您有效地使用緩存,否則它會真的減慢應用程序的速度,因爲每次調用它時都會啓動一個全新的請求週期。

Travis Leleu的回答將是標準的做事方式。但是,如果您必須將數據(用於可移植性或任何原因)導入到元素中,那麼requestAction不是要走的路。

由於您沒有執行必須在控制器中的任何業務邏輯,我強烈建議您將模型類作爲單例導入並實例化到元素中。你可以使用ClassRegistry :: init();

$Photo = ClassRegistry::init('Photo'); 
$Photo->find('all'); 

如果你需要做數據的任何額外的處理,你應該做的是,在模式本身或者使用蛋糕一個afterFind回調或在你的照片模型製作一個自定義的方法:

class Photo extends AppModel { 

    function customFind() { 
     $photos = $this->find('all'); 
     foreach ($photos as $photo) { 
      //processing code here... 
     } 
    } 

} 

然後調用它在你的元素:

$Photo = ClassRegistry::init('Photo'); 
$Photo->customFind(); 

基本上我試圖讓跨這裏是requestAction是適當的唯一情況是,你需要做的事情一樣redirec或使用組件。

如果您只是檢索和/或操作數據,那麼它屬於模型。

0

您可以發送數據到您的元素。例如在你的default.ctp中:

<?php echo $this->element('side_nav', $your_data); ?> 

並且在你的side_nav.ctp中你可以處理那些數據。