CakePHP 视图包括其他视图

2022-08-31 00:48:31

我有一个CakePHP应用程序,它将在某个时刻显示一个视图,其中包含产品媒体(图片或视频),我想知道是否有某种方法可以包含另一个威胁视频或威胁图片的视图,具体取决于标志。我想将这些“小视图”用于其他几个目的,因此它应该“像”一个蛋糕组件,以便重新利用。

你们建议在蛋糕约定中使用什么(而不是使用原始命令)include('')


答案 1

为了获得此处的信息,以防有人偶然发现这一点,重要的是要注意解决方案因CakePHP版本而异。

对于蛋糕PHP 1.1

$this->renderElement('display', array('flag' => 'value'));

在你的视图中,然后在你可以创建一个名为 的文件,其中将具有你传递给它的任何内容的值。/app/views/elements/display.thtml$flag

对于蛋糕PHP 1.2

$this->element('display', array('flag' => 'value'));

在你的视图中,然后在你可以创建一个名为 的文件,其中将具有你传递给它的任何内容的值。/app/views/elements/display.ctp$flag


在这两个版本中,元素都将有权访问视图有权访问的所有数据 +您传递给它的任何值。此外,正如有人指出的那样,这也是一种选择,但是如果不使用缓存,它可能会对性能造成严重损失,因为它必须完成正常操作的所有步骤。requestAction()

答案 2

在控制器中(在本例中为 post 控制器)。

function something() {
    return $this->Post->find('all');
}

在元素目录(app/views/element)中创建一个名为 posts.ctp 的文件。

在 posts.ctp 中:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

然后在您的视图中:

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

这主要来自CakePHP的书:使用请求操作创建可重用元素

我确实相信使用requestAction非常昂贵,因此您将需要研究缓存。


推荐