CakePHP:我可以在没有关联视图的控制器中创建一个函数吗?

时间:2010-10-09 21:16:59

标签: php cakephp

我的users_controller中有一个索引操作,用于获取用户列表。对于每个用户,我想计算他们关联的项目数量(一个用户=>许多项目)。我正在考虑使用像getProjectTotal这样的方法并为每个用户调用它。我会将此方法放在users_controller中并将其称为

$this->getProjectTotal($id) 

在视图中?

谢谢,

Jonesy

3 个答案:

答案 0 :(得分:2)

不确定。听起来这只是一个基于调用的辅助方法。我一直这样做。我通常会将方法可见性设置为private或至少受保护,以防止在渲染方案中意外调用它。

答案 1 :(得分:1)

我仍然是CakePHP的新手,但我一直在使用Cake 1.2中的内置counterCache来跟踪我的一个应用程序中父模型的hasMany记录的数量。在父模型中创建一个字段来存储hasMany计数,并在子模型的$ belongsTo属性中启用counterCache,你就可以了。只要“hasMany”记录的#增加/减少,它就会自动更新父模型中的counterCache计数字段。我喜欢这种跟踪方法,因为如果你需要的只是没有任何其他条件的计数,它会让控制器更加清洁。

文档:http://book.cakephp.org/view/816/counterCache-Cache-your-count

另外,我还是MVC的新手,但我想如果您要通过私有/受保护的控制器方法收集计数,您需要在控制器中调用它,然后将数据发送到在这种情况下,查看,不从视图中执行实际方法。

答案 2 :(得分:0)

另外 - 是的,你可以为不能呈现视图的工作制作一个控制器方法 - 但是 - 在你的情况下你应该使用counterCache /一个Model函数,因为你要么取/计算/操纵与项目模型相关的实际数据及其与用户模型的关系以及当前登录用户的当前数据。

构建我的控制器时,我倾向于坚持使用为requestAction调用的元素呈现视图或返回数据的方法。如果该方法是计算或设置变量但不需要模板或未从元素调用,则将其移动到组件/辅助/模型/行为。结合内省标志中带有@requestAction的docblock,我可以获得常规操作的列表,以及返回操作的数据,而不必担心控制器充满了其他方法。