【问题标题】:One view called by two different controllers (A form contained with in a view calls another controller)一个视图由两个不同的控制器调用(视图中包含的表单调用另一个控制器)
【发布时间】:2012-06-30 11:32:58
【问题描述】:

亲爱的朋友们:这似乎更像是一个概念问题而不是编程问题。我是 MVC 的新手,在理解什么可以调用什么方面存在问题。程序控制的流程。

问题:Controller A --Calls-->Model A--calls-->View A。现在,一旦加载了 View A,它还包含一个用于插入带有 sumbitt 按钮的评论的表单。

一旦 cmets 被插入(并提交),它就会调用 Controller B--calls-->Mocel B. 将数据插入 cmets 表 - 而且它没有要调用的视图。

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

问题 2:可以使 cmets 表单(控制器 B 和模型 B)成为控制器 A 和模型 A 的一部分,但是评论表单将不再是可重用的模块,并且需要插入到我的每个页面中喜欢用在里面。

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

总结:: 有一个由控制器 B 和模式 B 管理的表单(它没有视图,它显示为由控制器 A、模型 A 和视图 A 管理的页面的一部分)模型 B 在完成其工作后需要调用控制器 A(使其可以刷新页面)HOW? 感谢你们勇敢的灵魂提前

【问题讨论】:

  • 模型层的结构(是的,在受 MVC 启发的适当架构中,模型不是一个类)不应该对应用程序的其余部分有任何了解。模型不应调用控制器。 永远不会!。我认为你的问题的核心是,当你试图理解 MVC 时,你正在使用 CodeIgniter 作为 MVC 模式应该是什么样子的蓝图。但是 CodeIgniter 的 MVC 实现是完全错误的。

标签: php model-view-controller codeigniter


【解决方案1】:

我认为你的策略从

开始有点偏离

Controller A --Calls-->Model A--calls-->View A

您的模型真的不应该调用您的视图。控制器通常负责此操作。向控制器发出请求,控制器从模型中获取所有数据,然后使用视图对其进行格式化/模板化并将其输出给用户。控制器应该是每个请求的中心。

QUESTION 1 如何从 Model B 调用 Controller A?

Model B 真的不应该调用控制器。 MVC 真的不是为此而设计的。如果您需要模型 B 的数据,请从控制器获取。如果您需要控制器 A 中存在的功能,请将其重构为可在应用中的任何位置使用的实用函数。

问题2:可以使cmets形式(控制器B和 模型 B) 控制器 A 的一部分?

是的,这再次来自一个好的应用设计。我想您的模型之一能够检索 cmets。也许每个用户也许每个时间框架。您可以从控制器 A 调用该模型函数。通过加载模型$this->load->model('Post') 并撤消您的帖子$this->Post->most_recent_posts()

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

是的,您网站的功能与其控制器和模型的绑定过于紧密。它们必须更加松散/通用,以便可以在任何控制器中使用功能。

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

【讨论】:

  • 哦该死的地狱......这太简单了......就在我的模型完成工作的地方......我可以重定向('/controllerA/控制器A的方法','刷新');这只会刷新页面。它在某些论坛中被称为**内部重定向**。还要记住,redirect() 是 URI 助手类的函数,所以要么自动加载它,要么手动加载它。非常感谢恶魔特别是 dm03514
  • MR dm03514 这么好的答案 非常感谢..第 1 点:: 这正是我所做的模型——报告回 --controller 然后 --controller 调用 ---view (但我没有这么写) Point2:: 模型 B 在完成计算后可以通过 redirect() 将控制权交给控制器 A,正如我在下面解释的那样......非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多