我将之前自定义cms的表迁移到cakephp。模型,控制器,视图,帮助器已经创建,我现在可以让它们工作。但是,我在渲染文本字段时遇到了一些问题。
原始表中的文本包含需要解析的标记代码,以便正确显示它们。我为此做了一个帮助,到目前为止它可以解析大部分标记代码。留下对嵌套列表和代码进行解析,如下所示:
{img src =“showImage.php?xxxx”alt =“”link =“”} 其中xxxx是images表中的id。
从以前的系统中,这实际上调用了images表并查找了图像的实际url,以便可以显示它,并且记录中可能存在相当多的这些代码。帮助程序可以提取图像ID,但是根据我在Cakephp中的理解,视图和帮助程序主要用于渲染控制器已经检索的数据。如果是这种情况,那么似乎我将无法调用图像表并传递这些图像ID以获得显示图像所需的内容,或者不建议使用它。现在,如果帮助者无法在控制器上调用,我有点迷失代码来获取图像数据。
对不起,在这里新蛋糕,还在学习如何正确使用蛋糕,如果你能指出我正确的方向 - 在哪里放置代码,或者如果我需要创建一个插件或组件或任何东西 - 将非常感谢。
答案 0 :(得分:0)
您可以在帮助程序中使用requestAction()。即使requestAction()的性能正常,我也不会称之为完美的解决方案,但是这样你就不得不为每个图像进行一次db查询,效率非常低,而这在视图层中不应该发生。顾名思义,请求操作将请求控制器操作,操作必须返回数据。
如果你想要真正的 MVC违规,你也可以只使用ClassRegistry :: init()图像模型,并使用视图中的模型实例直接获取记录。但那是不好的做法。
现在我会考虑尊重MVC的正确解决方案。 :)相反,您可以使用Model::afterFind()回调,在此处提取所有图像ID,并使用您提取的ID进行查找('all')并将其添加到结果中。这里的优点是对所有图像的单个查询。
Best practice would be to have a separate method喜欢extractImageIds()并从afterFind()调用它。这样它在逻辑上是分开的,也可以在afterSave()中与其他东西相比更好地进行测试。
如果您有计划重构此旧版图像处理,我还编写了a plugin来处理正确的抽象文件存储和图像处理。