Model view controller 在CakePHP中从助手调用模型是否有缺点?

Model view controller 在CakePHP中从助手调用模型是否有缺点?,model-view-controller,caching,cakephp,helpers,controllers,Model View Controller,Caching,Cakephp,Helpers,Controllers,一点上下文:我需要缓存我的CakePHP站点的主页——除了一小部分之外,它根据用户的IP地址显示本地事件 显然,您可以使用标记来指定页面中不应缓存的部分;但不能用这些标记将控制器集变量包围起来,使其成为动态的。据我所知,一旦缓存了一个页面,控制器操作就到此为止 nocache标记可以有效地围绕元素和助手。因此,我在这些标记中创建了一个元素,它调用一个helper函数来访问模型并获取适当的数据。要从我使用的辅助对象获取模型,请执行以下操作: $this->Modelname =& C

一点上下文:我需要缓存我的CakePHP站点的主页——除了一小部分之外,它根据用户的IP地址显示本地事件

显然,您可以使用标记来指定页面中不应缓存的部分;但不能用这些标记将控制器集变量包围起来,使其成为动态的。据我所知,一旦缓存了一个页面,控制器操作就到此为止

nocache标记可以有效地围绕元素和助手。因此,我在这些标记中创建了一个元素,它调用一个helper函数来访问模型并获取适当的数据。要从我使用的辅助对象获取模型,请执行以下操作:

$this->Modelname =& ClassRegistry::init("Modelname");

然而,在我看来,无论从CakePHP还是一般MVC原则来看,这都是一种不确定的做事方式。所以我的问题是,这是一种完成我想做的事情的适当方式,还是应该敲响警钟?有没有更好的方法来实现我的目标,而我只是在这里错过了?

与其使用助手,不如尝试将代码放在元素中,并在元素中使用requestAction

请参阅此链接


这将是一种比尝试在助手中使用模型更好的方法。

与其使用助手,不如尝试将代码放在元素中,并在元素中使用requestAction

请参阅此链接


这将是一种比试图在助手中使用模型更好的方法。

除了打破所有精心制定的MVC原则之外

除了将此项放入元素之外,为什么不使用一点ajax来获取它呢

  • 将调用放在它自己的控制器操作中,这样目标URL->/controller/action(非常方便!)
  • 将IP传递回该操作,以便在查找调用中使用
  • 将ajax更新回调设置为元素内的target,并相应地显示调用结果
  • 无需直接从视图调用模型,也无需使用requestAction将事情拖入泥潭


    HTH

    除了打破MVC所有精心制定的原则之外

    除了将此项放入元素之外,为什么不使用一点ajax来获取它呢

  • 将调用放在它自己的控制器操作中,这样目标URL->/controller/action(非常方便!)
  • 将IP传递回该操作,以便在查找调用中使用
  • 将ajax更新回调设置为元素内的target,并相应地显示调用结果
  • 无需直接从视图调用模型,也无需使用requestAction将事情拖入泥潭


    啊哈!这似乎比通过扭曲来访问助手内部的模型要好得多。不过,还有一个问题:关于requestAction的Cookbook部分说,“如果不缓存requestAction而使用,可能会导致性能低下……requestAction最好与(缓存的)元素结合使用”。显然,当我在一个我不想缓存的元素上显式地使用requestAction时,读到这篇文章我感到有点紧张!你认为这是正确的轨道吗?非常感谢。过去对此进行了很多讨论,结果似乎是使用requestAction的开销通常是可以接受的。我个人想检查脚本内存使用情况,如果这可能是服务器上的一个限制。顺便说一句,如果你担心助手和模型之间的依赖关系,不要看FormHelper的代码,你可能会做噩梦。啊哈!这似乎比通过扭曲来访问助手内部的模型要好得多。不过,还有一个问题:关于requestAction的Cookbook部分说,“如果不缓存requestAction而使用,可能会导致性能低下……requestAction最好与(缓存的)元素结合使用”。显然,当我在一个我不想缓存的元素上显式地使用requestAction时,读到这篇文章我感到有点紧张!你认为这是正确的轨道吗?非常感谢。过去对此进行了很多讨论,结果似乎是使用requestAction的开销通常是可以接受的。我个人想检查脚本内存使用情况,如果这可能是服务器上的一个限制。顺便说一句,如果你担心助手和模型之间的依赖关系,不看FormHelper的代码,你可能会做噩梦。听起来不错。您是否认为ajax获取本质上比使用requestAction更好?我很容易看到,我有各种各样的选项,它们比我最初的仓促计划要好,更难解释为什么其中一个比另一个好得多……在90%的情况下,视图阶段对象需要独立的数据,是的,ajax>requestAction。MVC就像是划着一只装满糖果的独木舟顺流而下。requestAction->你转过身,把蛋糕划回到河上。Ajax->你在手机上打电话给你的朋友,让数据漂浮在一根内管上。(在凉爽的地方)可能有点潮湿,但这比在河上划水要好。因此->PHP的requestAction()必须向后移动才能从$this是la视图的位置获取;ajax触发你的控制器动作=传送到开始,用一个新的$this。谢谢,你的独木舟类比说服了我,我来试试;)我在这里没有得到这方面的论据——使用AJAX,您需要处理额外HTTP请求的开销和额外的javascript复杂性。在服务器(requestAction)和网络(AJAX)上发生的事情之间的性能差异将是规模的大小,更不用说浏览器在回流内容方面所做的任何工作了(比如,想想这在移动设备上是如何工作的)。当然,在某些延迟加载的情况下,这可能是一种有用的技术