使用自定义cakePHP帮助程序检索数据库信息的正确方法是什么?
答案 0 :(得分:3)
简短的回答是 - 不。您需要从Controller中提取数据并将其传递给帮助程序从中获取数据的视图。
当我开始使用MVC模式时,我在开始时有同样的异端思想。 :)
答案 1 :(得分:0)
在帮助程序中找不到正确的数据库信息方法,你应该避免使用它。
但是有一种方法可以在帮助器和视图中执行此操作: $ posts = ClassRegistry :: init('Post') - > find('all');
同样,建议您不要在视图中使用模型,稍后您会感谢自己。
答案 2 :(得分:0)
我不同意我可能不会在帮助程序中使用数据库结果的概念。因为 假设我试图在侧栏或页脚中显示动态链接我必须将结果放在我的每个控制器中的每个方法中。 所以很容易在helper中调用函数来创建一个元素并在其中调用该帮助器。
现在你可以像这样调用帮助器中的数据库结果
ClassRegistry ::初始化( '后') - >发现( '全部'); 正如法哈德所写。
如果您在帖子模型中制作了一些方法,那么您也可以调用它 像这样 ClassRegistry ::初始化( '后') - > custom_function_name($ PARAMS);
答案 3 :(得分:0)
如果要在每个页面上都有动态链接,那么编写一个从db中获取链接的组件,然后在控制器中设置变量,以便视图知道它。 你有AppController使用组件,如果你正确地编写它,你将不必在任何行动中包括它。
http://github.com/markstory/cakephp_menu_component
或者...
编写一个使用requestAction的元素并缓存菜单。在您需要时在视图中包含此元素。
http://bakery.cakephp.org/articles/view/creating-reusable-elements-with-requestaction
或者...
在AppController :: beforeFilter方法中运行代码并以此方式分配视图变量。
http://book.cakephp.org/view/984/Callbacks
这些方法中的任何一种都是MVC 正确,而在您的视图中实例化模型不正确并且没有任何争论的空间。在学习CakePHP如何保存代码 DRY
的同时,以正确的方式做到并避免让您头疼