2013-01-12 78 views
0

我在使用CakePHP(2.2.x)構建博客,博客的一部分是側邊欄。像最近的帖子,檔案和meta的wordpress一個側欄。我不確定我是否應該爲邊欄使用元素或助手。CakePHP:元素或助手

目前我正在使用一個元素。一些代碼片段:

控制器/ PostsController.php

public function index() { 
    $this->set('posts', $this->Post->find('all')); 
} 

public function show($id) { 
    $this->set('posts', $this->Post->find('all')); 
    $this->set('post', $this->Post->findById($id)); 
} 

查看/職位/ index.ctp

<div class="span8"> 
    <?php foreach ($posts as $post) { ... } ?> 
</div> 
<?php echo $this->element('sidebar', array('posts' => $posts)); ?> 

查看/職位/ show.ctp

<div class="post"> 
    ... render the post using $post ... 
</div> 
<?php echo $this->element('sidebar', array('posts' => $posts)); ?> 

查看/元/ sidebar.ctp

<?php foreach ($posts as $post) { ... render the recent posts ... } ?> 

正如你所看到的,show.ctpindex.ctp包括sidebar.ctp元素,都需要$posts變量。因此,我需要在indexshow操作中撥打$this->Post->find('all')。 我想打電話$this->Post->find('all')只有一次我想知道是否使用助手可以,幫助。

回答

1

你要使用requestAction()

您可以通過使用requestAction充分利用的元素()。 requestAction()函數從控制器 操作中獲取視圖變量,並將它們作爲數組返回。這使您的元素以 以真正的MVC風格執行。創建一個控制器動作,爲您的元素準備 視圖變量,然後調用element()的第二個參數中的requestAction(),以向控制器中的變量提供元素視圖 變量。

你可以閱讀更多關於他們在這裏:http://book.cakephp.org/2.0/en/views.html#passing-variables-into-an-element

基本上,你只需指定您希望您的元素來檢索它的數據。當元素加載時(不管在哪個頁面上),它將運行指定的操作來檢索你想要的任何數據。

+0

是的,這很合適。謝謝。 –

+0

請注意,requestAction速度很慢。這是一個完整的請求,至少在v2.x中是這樣。 – geoidesic