CakePHP问题:如何从另一个控制器调用一个控制器的视图?

时间:2011-09-07 15:05:41

标签: cakephp cakephp-1.3

这是posts / index.php =>

<?php foreach ($allposts as $post) {
            echo '<tr class="class_row">';
            echo '<td>';

            echo $this->Html->link($post['Post']['title'],
                                array('controller'=>'posts','action'=>'view',$post['Post']['id']),
                                array('id'=>'id_anchor_title','class'=>'class_anchor_title') );
            echo '<tr>';
            echo '<td>';
}
?>

我想从products / index.ctp =&gt;中调用此帖子/ index.ctp它将是所有控制器的通用/通用index.ctp。我怎么能这样做?

在posts / index.ctp中使用$ allposts。它设置在帖子/索引操作中。但是当我从products / index action调用posts / index.ctp时,会在那里设置不同的变量。假设$ this-&gt; set('allproducts',$ allproducts);在产品/索引操作中设置。现在我如何在posts / index.ctp中使用allproducts变量?

3 个答案:

答案 0 :(得分:1)

我们可以使用$this->render('view_name');将其他视图用于其他操作。我不确定你将如何实现目标。

答案 1 :(得分:1)

正如@Vins所说,您可以在控制器操作结束时使用$this->render('view_name');来呈现不同的视图(在您的情况下,它应该是$this->render('/posts/index');

在使用您想要的变量方面,您可以做一些事情。一种方法是更改​​每个控制器中的set函数以使用通用名称。例如,帖子控制器可以有$this->set('results',$allposts);,产品控制器可以$this->set('results',$allproducts);这样做,您始终可以在视图文件中引用$results。您可能还想设置另一个变量$pageModel。例如,您的产品控制器中的$this->set('pageModel','Product');。然后你的posts / index.php文件可以这样做:

<?php foreach ($results as $result) {
            echo '<tr class="class_row">';
            echo '<td>';

            echo $this->Html->link($result[$pageModel]['title'],
                                array('controller'=>$this->controller,'action'=>'view',$result[$pageModel]['id']),
                                array('id'=>'id_anchor_title','class'=>'class_anchor_title') );
            echo '<tr>';
            echo '<td>';
}
?>

请注意我已将'controller' => 'posts'替换为'controller' => $this->controller这会使您的视图变为动态,因此链接将始终指向正确控制器的视图操作。

我希望这有帮助!

答案 2 :(得分:0)

如果要渲染posts / index.ctp而不是products / index.ctp,请使用$this->render('/posts/index');

或者你可能想把它放在一个元素中(这与generic / common index.ctp的想法相同)。