【发布时间】:2009-05-11 03:08:14
【问题描述】:
对不起,什么是通用标题。我不是最擅长头衔的人。
无论如何,Cake 传递数据的方式(作为哈希)几乎就是我什至需要问这个问题的原因。如果当我将一个变量/obj 从控制器传递到视图时,它是一个我可以向其提问的对象(即 $duck->quack() ),而不是让它成为一个数组/字典(即 $duck[' Duck']['quack'] == true) 这很容易。
我的应用中有一个用户 x 可以拥有或不拥有的项目列表。在某些视图中,我显示数据库/应用程序中的所有项目(即分页),并且对于每个项目,我需要知道登录用户是否拥有它。要回答这个问题,我需要做一个查询(由于复杂的 HABTM 关系),这是在模型内部完成的。换句话说,我的 Item 模型有一个函数 isOwnedByUser($user_id, $item_id) 如果它归用户所有,则该函数为真。我想从视图中调用这个函数。
这自然违反了 MVC 框架,但我不知道该怎么做。我有四个想法:
想法 1:
在 helper 中执行此操作:
App:Import('Model','Item');
$item = new Item();
$item->isOwnedByUser($user_id,$item_id);
并从视图中调用帮助程序(当然还传入 $item_id 和 $user_id)。但这确实违反了 MVC 框架。
想法 2:
在 item_controller.php 中创建一个动作并使用 requestAction() 从视图中调用该动作。但是我heard that this was extremeley inefficent
现在我在looking 时发现了这两个想法来解决我的问题,但根据他们的说法,这两个想法很糟糕,所以我想出了另外两个解决方案:
想法 3:
当将分页数据返回到视图时,我可以确保所有项目都有一个“user_id”键,以便我可以根据登录用户的 ID 检查视图中的键,以查看他/她是否拥有项目。但这需要a)我重新编写分页b)非常丑陋的查询,尤其是对于某些视图(搜索),c)整体丑陋和缓慢。所以我决定放弃这个想法
想法 4:
每次视图需要知道一个项目是否归用户所有时,我都会从控制器传递另一个数组,其中包含用户拥有的所有项目,在视图中你可以使用 in_array() 来检查如果用户拥有所述项目。当然这个问题很明显:如果用户有很多物品怎么办?
简而言之,我被困在这个问题上,我不知道从哪里开始,我会感谢所有帮助!谢谢!
【问题讨论】:
-
我还应该补充一点,Cake 处理 HABTM 关系的方式也很糟糕。真的很烂。但这与这个问题无关。
标签: php cakephp model views model-view-controller