草庐IT

php - 关于 mvc 的一般...... Controller 应该将数据传递给 View 还是 View 应该直接从模型中获取它?

coder 2023-12-31 原文

我正在努力学习并充分理解 mvc 模式,同时学习 php。我决定构建基本的 mvc 框架,以便以后在各种项目中使用。在这里阅读了很多关于 mvc 和模型/ View / Controller 之间的耦合的帖子后,我有点迷路了。目前我的理解是,在 Web 应用程序 Controller 中处理来自浏览器的请求,并在必要时调用方法模型类告诉模型改变它的状态。然后 Controller 实例化适当的 View 类,负责显示界面。 这是我不明白的一点......

  1. 现在 Controller 应该将适当的模型对象传递给 View ,并且 View 应该在需要时从模型中提取所有数据吗?

  2. 或者 Controller 应该从模型中获取数据并将其传递给 View ,可能将其全部包装到 View 将访问的单个包装对象中并从那里获取数据?

  3. 或者 View 应该在需要时简单地实例化适当的模型并直接从模型对象中提取数据?

从我这里读到的

http://www.phpwact.org/pattern/model_view_controller

我倾向于第三个选项,其中 Controller 不传递任何内容来查看和查看它需要的实例化模型。这是因为:

  1. View 和 Controller 应该对模型具有相同的访问权限

  2. Controller 不应简单地充当 View 和模型之间的中介。

是否真的有一种正确的方法,还是取决于项目?另外,您会向对 OOP 有一定了解但对 php 相对较新且对 mvc 架构不太清楚的人推荐什么方法。或者,也许我应该选择对我来说正确的一切,并从我的错误中吸取教训(尽管我想避免这种情况;)?

现在,如果我的问题不清楚,请告诉我,然后我会尝试更好地解释。我也阅读了很多关于 stackoverflow 的帖子和不同网站上的许多文章,但仍然希望得到帮助,所以提前感谢所有答案.

最佳答案

就个人而言,我一直是#2 的支持者。 View 不应该关心模型。就此而言, View 根本不应该进行任何处理。它应该做它应该做的事情,格式化数据。

基本的控制流程应该是这样的: Controller 接收来自浏览器的请求。它处理请求,决定需要什么数据,并从模型中检索它。然后它将数据传递到格式化数据并显示它的 View 。

作为扩展,用户输入在 Controller 内部处理,并在需要时保存到模型中,然后将反馈馈送到 View 等。要删除的关键点是处理发生在 Controller 内部。

关于php - 关于 mvc 的一般...... Controller 应该将数据传递给 View 还是 View 应该直接从模型中获取它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1463791/

有关php - 关于 mvc 的一般...... Controller 应该将数据传递给 View 还是 View 应该直接从模型中获取它?的更多相关文章

  1. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 渲染另一个 Controller 的 View - 2

    我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>

  4. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  5. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  6. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  9. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  10. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

随机推荐