CakePHP的:如何在一个CakePHP的页面布局上的两个或多个应用程序的意见结合起来?

StackOverflow https://stackoverflow.com/questions/1749655

  •  20-09-2019
  •  | 
  •  

使用CakePHP我的目标是两个或更多控制器的索引视图在一个布局页面结合。

实施例: 我有一个控制器:新闻,活动,链接。 我想显示一个页面布局,从每个表中的最后五个条目。 此外,当从视图的链接之一被选择,应该将用户带到该记录的相应视图。

我已经通过在意见但不知道怎样一种制造视图成元素将实现此目的。

什么让我困惑的是如何从三个独立的控制器/视图组合成一个布局?

由于

有帮助吗?

解决方案

创建你的新闻,事件获取最后的5个记录的方法和模型的链接。然后在你的控制器或者包括在控制器中的模型::使用性质,或者动作使用ClassRegistry ::的init()来获得访问模型,e.g。

function my_action() {
  $news = ClassRegistry::init('News')->getRecent();
  $events = ClassRegistry::init('Event')->getRecent();
  $links = ClassRegistry::init('Link')->getRecent();
  $this->set(compact('news', 'events', 'links'));
}

然后,您可以从任何控制器操作这些模型的方法,使您的应用程序DRY。

在您的my_action.ctp视图,并且实际上许多其他视图,只是再现元素e.g。

// my_action.ctp
<?php
echo $this->element('recent_news');
echo $this->element('recent_events');
echo $this->element('recent_links');
?>

您元件可以然后只是遍历$消息(或任何)可变显示与链接项目,以在它们各自的控制器的“视图”的动作。

仅仅因为控制器的型号相匹配,并不意味着你不能在它使用其他机型。

其他提示

首先,我要说的是,视图和控制器不一定绑在一起 - 蛋糕将隐含通过添加文件层次结构/命名约定指定的观点,但这并不一定是这样。因此,尝试从控制器(这是主要的目的,用于使用所述MVC架构中的一个)去耦,以想到的意见。

假设你的三个视图(A,B,C)是完全按照你想要他们复制,把它们放到一个元素(这只是位于特殊APP /视图/元素/目录中查看文件)。现在,可以在任一布局或其他视图中使用它们,只要通过使被$ this-呼叫>元素(“的ElementName”,阵列(“选项”))。

基本上,只要抽象代码要显示为元素,然后插入那些元件成所需的布局。

可以设置控制器以使用RequestHandler然后进行视图元素能够取在应用程序中从单独的控制器自己的数据的

此链接更好的解释它比我能 http://bakery.cakephp.org/articles/view/创建可重复使用的元素与 - requestaction

有一点要记住的是,你所呼叫的控制措施应占缓存自己的数据,所以你不要做不必要的数据库查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top