在cakephp [2.2]中,我已经烘焙了一切,我的“人”视图非常忙于关系,电话和地址以及其他相关数据。我确实希望所有这些信息都可以在人物视图中看到,但不是在烘焙布局中。
谢谢,我很感谢指导。
答案 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));