一个视图由两个不同的控制器调用(视图中包含的一个窗体调用另一个控制器)

时间:2012-06-28 21:35:56

标签: php model-view-controller codeigniter

亲爱的朋友们:这似乎更像是概念问题,而不是编程问题。对MVC不熟悉并且在理解什么可以称之为什么方面存在问题。程序控制的流程。

问题:控制器A - 呼叫 - >模型A - 调用 - >视图A.现在一旦加载了视图A,它还包含一个用于通过sumbitt按钮插入注释的表单。

插入(并提交)评论后,它会调用控制器B - 调用 - > Mocel B.将数据插入到评论表中 - 此外它还没有可以调用的视图。

问题1:如何从模型B调用控制器A(因为模型B没有视图)。可以从ModelB加载ViewA,但这需要重新编写已存在于Controller a中的代码。此外,我希望将评论表格插入到许多页面中,因此我必须手动重新加载所有这些页面(视图)。

问题2:可以将控制器A和模型A的注释表(控制器B和模型B)作为一部分,然后注释表将不再是可重复使用的模块,需要插入每个页面中喜欢它用于。

问题3:我是否有一些概念上的错误。这是MCV的工作方式吗?

摘要::有一个由控制器B和模态B管理的表单(它没有视图,它显示为由控制器A,模型A和视图A管理的页面的一部分)模型Bafter完成其工作需要调用控制器A(这样它可以刷新页面)如何? 感谢你提前为灵魂做好准备

1 个答案:

答案 0 :(得分:0)

我认为你的策略有点偏离

  

控制器A - 呼叫 - >模型A - 呼叫 - >视图A

你的模特真的不应该打电话给你的观点。控制器通常负责这一点。向控制器发出请求,控制器从模型获取所有数据,然后使用视图对其进行格式化/模板化并将其输出给用户。控制器应该是每个请求的中心。

  

问题1如何从模型B调用控制器A?

模型B真的不应该调用控制器。 MVC真的不是这个的终结者。如果需要模型B的数据,请从控制器获取。如果您需要控制器A中存在的功能,请将其重构为可在应用程序中的任何位置使用的实用函数。

  

问题2:可以发表评论表(控制器B和   模型B)控制器A的一部分?

是的,这又来自一个好的应用程序设计。我想你的一个模型能够检索评论。也许每个用户可能每个时间框架。从控制器A,您可以调用该模型功能。加载模型$this->load->model('Post') 并暂停您的帖子$this->Post->most_recent_posts()

  

问题3:我是否有一些概念上的错误。这是方式   MCV有效吗?

是的,您网站的功能与其控制器和型号的绑定过于紧密。它们可以更宽松/更通用,因此可以在任何控制器中使用功能。

我想回答你的最后一点/主要观点,但看到一些代码真的很有帮助。