元素或视图扩展或其他什么?参考应用?

时间:2012-11-13 00:05:36

标签: cakephp implementation

在cakephp [2.2]中,我已经烘焙了一切,我的“人”视图非常忙于关系,电话和地址以及其他相关数据。我确实希望所有这些信息都可以在人物视图中看到,但不是在烘焙布局中。

  1. 我应该如何处理相关数据的这些部分?我不确定我是否应该使用元素或扩展视图或插件或者什么,我对此有点新鲜并且文档对我(在我的级别)不明确应该在何时使用。烘焙的代码似乎是一种单一的方法,所以我在那里找不到多少帮助。
  2. 一旦用户选择从人物视图上的列表中编辑电话号码(例如),它就会将他们带到电话编辑视图,然后将其返回到电话列表(索引视图)而不是人员视图他们在。如何让他们回到人物视图?
  3. 他们提供的博客示例很不错,但是在cakephp的某个地方是否有一个“参考”应用程序,它演示了各种功能的最佳实践?我找不到一个,或者只是一个简单的应用程序示例。
  4. 谢谢,我很感谢指导。

1 个答案:

答案 0 :(得分:1)

这是一个相当广泛的问题,但我会尝试回答它。我不确定你的编程知识是多么先进,如果我正在重复你已经知道的事情,请原谅我。首先,当我第一次开始使用框架时,this article是一个很好的帮助,因为它解释了代码应该去哪里以及为什么。它是我见过的最接近“参考应用程序”的,它实际上是一个很好的学习工具。您可以尝试查看一些较高级的Cake应用程序,例如Croogo(基于Cake的CMS)。但代码库必然会有点复杂。

当你想在不同的视图中实际重用它们时,我个人会使用元素。然而,问题是为元素提供数据。有一种名为requestAction的方法,但即使手册也指出这应该与审核一起使用并与缓存结合使用。问题是在不同的元素中使用大量requestAction次调用会使用方法来控制您的控制器,并且不遵守"Skinny Controllers, Fat Models"咒语。

我会将大多数相关数据调用放在各自的模型中,并从Controller调用这些模型方法并将它们提供给View。所以,假设你想要10个最新的PhoneNumbers和相关用户。

您的PhoneNumber模型中会有一个方法,它返回一组用户及其语音。使用Containable behaviour限制返回的相关模型的数量。下面的代码是一个示例,因此实际实现可能会有所不同:

public function getRecentPhoneNumbers($limit=10) {
  $phoneNumbers = array();

  $phoneNumbers = $this->find('all', array(
    'limit' => $limit,
    'contain' => array('User'),
    'order' => 'PhoneNumber.id DESC'
  ));

  return $phoneNumbers;
}

如果PhoneNumber和User模型正确相关,您可以从用户模型中调用getRecentPhoneNumbers()

$this->PhoneNumber->getRecentPhoneNumbers(10)

或者来自用户控制器:

$this->User->PhoneNumber->getRecentPhoneNumbers(10)

假设您有一个元素显示这10个数字的列表,并且它接受一个名为$recentPhonenumbers的变量,然后使用getRecentPhoneNumbers调用中返回的数组在相关的UsersController方法中设置该变量:

$this->set('recentPhonenumbers', $this->User->PhoneNumber->getRecentPhoneNumbers(10));

这将使其可用于包含元素的视图。

扩展视图相对较新(从Cake 2.1及其后开始)并且我没有使用它们,但似乎是创建条件标记的好方法。

至于第二个问题,将用户重定向到人物视图,而不是索引视图。这是在Controller的edit()方法中调整重定向(see the manual以获取更多详细信息)的问题。标准的烘焙edit()方法接受$id参数,您可以使用此参数重定向到view()(可能还接受$id参数)。

所以重定向可能看起来像这样:

$this->redirect(array('controller' => 'users', 'action' => 'index'));

将其更改为:

$this->redirect(array('controller' => 'users', 'action' => 'view', $id));
相关问题