CakePHP:元素或助手

时间:2013-01-12 18:39:01

标签: php cakephp

我正在使用CakePHP(2.2.x)构建博客,博客的一部分是侧边栏。像wordpress一样的侧边栏,最近的帖子,档案和元。我不确定是否应该为侧边栏使用元素或帮助器。

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

控制器/ 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变量。因此,我需要在$this->Post->find('all')index行动中致电show。 我想打电话给$this->Post->find('all') 一次,我想知道使用助手是否可以帮助。

1 个答案:

答案 0 :(得分:1)

您需要使用requestAction()

  

您可以使用requestAction()充分利用元素。该   requestAction()函数从控制器中获取视图变量   动作并将它们作为数组返回。这使您的元素成为可能   以真正的MVC风格表现。创建准备的控制器操作   你的元素的视图变量,然后调用requestAction()   element()的第二个参数用于为视图提供元素   控制器中的变量。

您可以在此处详细了解它们:http://book.cakephp.org/2.0/en/views.html#passing-variables-into-an-element

基本上,您只需指定元素检索数据的位置即可。当元素加载时(无论在哪个页面上),它将运行指定的操作以检索您希望它拥有的任何数据。