0

在 cakephp [2.2] 中,我已经烘焙了所有内容,我的“人”视图非常忙于处理关系、电话、地址和其他相关数据。我确实希望所有这些信息都在人员视图中可见,尽管在烘焙布局中并不完全。

  1. 我应该如何处理相关数据的那些部分?我不确定我是否应该使用元素或扩展视图或插件或什么,我对此有点陌生,并且文档对我(在我的水平)来说并不清楚应该在什么时候使用。烘焙代码似乎是一种单一的方法,所以我没有得到太多帮助。
  2. 一旦用户选择从人员视图的列表中编辑电话号码(例如),它会将他们带到电话编辑视图,然后将它们返回到电话列表(索引视图)而不是他们所在的人员视图. 我如何让他们回到人员视图?
  3. 他们提供的博客示例很好,但是在某处是否有一个用于 cakephp 的“参考”应用程序,它展示了各种功能的最佳实践?我找不到一个,或者只是一个简单的应用程序示例。

谢谢,我很感激指导。

4

1 回答 1

1

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

当你想在不同的视图中实际重用元素时,我个人会使用元素。然而,问题在于为元素提供数据。有一种方法叫做requestAction,但即使是手册也指出这应该适度使用并与缓存结合使用。问题在于,在不同元素中使用大量requestAction调用会使您的控制器充满方法,并且不遵守“瘦控制器,胖模型”的口头禅。

我会将大部分相关的数据调用放在它们各自的模型中,并从控制器调用这些模型方法并将它们提供给视图。因此,假设您想要 10 个最新的电话号码和相关用户。

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

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()从 User 模型调用:

$this->PhoneNumber->getRecentPhoneNumbers(10)

或从用户控制器:

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

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

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

这将使它对包含该元素的视图可用。

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

至于第二个问题,将用户重定向到人员视图,而不是索引视图。这是在 Controller 的方法中调整重定向的问题(有关详细信息,请参阅手册)。edit()标准烘焙的 edit() 方法接受一个$id参数,您可以使用它来重定向到view()(它可能也接受一个$id参数)。

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

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

将其更改为:

$this->redirect(array('controller' => 'users', 'action' => 'view', $id));
于 2012-11-13T10:13:44.653 回答