Zend_Framework- 在哪里放置 $_GET 和 $_POST (HTTP 请求)处理?

2024-04-08

我最近读过这个帖子 http://blog.astrumfutura.com/archives/373-The-M-in-MVC-Why-Models-are-Misunderstood-and-Unappreciated.html这导致了一系列其他帖子似乎都提出了相同的想法:模型做所有事情,视图应该能够直接与模型通信,反之亦然,而控制器不介入。然而,显示的所有示例都相当简单,没有一个真正显示任何人如何尝试实现请求/响应周期的完整处理的示例,这让我想知道“模型是否应该负责处理请求(即$_GET、$_POST 等)本身?”以及“控制器是否应该仅作为传递来实例化必要的模型并将模型传递给视图?”。 (事实上​​,我发现一个极端的例子是在模型中嵌入 Zend_Form 对象)

从我阅读 Fowler 关于 MVC 和一般控制器的内容来看,乍一看似乎控制器层越薄越好。但后来我花时间回顾并研究了他关于 MVC 和 Front Controller 的说法(这只是把水搅浑了,因为这两种模式都定义了控制器),现在我的直觉表明 Zend_Framework 在实现这两种模式时,实际上创建了一个复合对象,执行 MVC 中控制器的功能和前端控制器(或类似的)中命令对象的功能。

所以我想知道在他们的应用程序中实现类似模式的其他人的一般意见是什么 - 您是否完全在控制器层内处理请求,或者您是否使模型意识到请求并直接在模型内处理参数?


我的第一个想法是避免在模型中处理任何类型的请求。这是控制器的工作。原因如下:假设您有一个模型可以处理您的请求(GET 或 POST)。这种结构最初可能会运作良好。现在,假设您想要添加某种 AJAX 功能或向系统添加一个服务接口。现在您接受的不仅仅是简单的 GET/POST,即 JSON 或 XML,您的模型将必须区分每种请求类型并知道如何解析它们。我相信这破坏了模型代码的很多简单性和清晰度。我同意控制器层应该很薄,但它也应该有一个角色和专业知识。对我来说,控制者的专业知识是:

  1. 处理传入请求
  2. 将数据传递给模型
  3. 请求/接受来自模型的数据
  4. 将数据的模型传递给视图

我对于视图应该了解模型的程度犹豫不决。有些人建议模型直接进入视图,但我认为这是脆弱的耦合。它经常导致视图中的逻辑。此外,如果您正在处理的项目中处理视图的团队成员不如主要开发人员那么精通编程,那么跟上变化就会给他们带来很大的负担。我倾向于将传递给视图的数据打包在中性结构中,而不是传递完整的模型。

我对 MVC 的解释主要是实用主义的。模型的工作是model您正在处理的域,不应该关心数据来自哪里。我经常构建模型代码,假设它可以在 Web 应用程序之外的命令行应用程序或桌面应用程序中使用。这种联合很少发生,但它会导致每一层都有明确的目的。控制器的工作是在相关各方之间移动数据,无论是客户端请求、模型还是视图。控制器应该有很少的域逻辑,但这并不意味着它没有任何代码。最后,景色应该看起来很漂亮。希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Zend_Framework- 在哪里放置 $_GET 和 $_POST (HTTP 请求)处理? 的相关文章

  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • 使用Multiprocessing和Pool时如何访问全局变量?

    我试图避免将变量冗余地传递到dataList e g 1 globalDict 2 globalDict 3 globalDict 并在全球范围内使用它们 global globalDict然而 在下面的代码中并不是这样做的解决方案 是否有
  • 如何执行“sudo nvm”?

    在我的 Mac 上 我想将一些需要 su 权限的包迁移到另一个节点版本 我使用 homebrew 安装 nvm 现在我需要执行 sudo nvm 或 reinstall packages将失败 me MacBook sudo nvm sud
  • iOS 电池监控 Swift

    我已将监控设置为启用 但模拟器和设备中的电池电量仍然为 1 UIDevice currentDevice batteryMonitoringEnabled true var level UIDevice currentDevice batt
  • tkinter:打开一个带有按钮提示的新窗口[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 用户如何按下 tkinter GUI 中的按钮来打开新窗口 我只需要非常简单的解决方案 如果代码也能被解释那就太好了 这
  • Azure函数版本2.0-应用程序blobTrigger不工作

    我有一个工作功能应用程序 它有一个 blob 输入和一个事件中心输出 在测试版中工作 随着最新的更改 我的功能不再起作用 我尝试根据发行说明更新 host json 文件 但它没有引用 blob 触发器 version 2 0 extens
  • 从输入类型编号获取无效值

    我正在使用输入类型数字 当它无效时 我如何从中获取值 例如 使用类型编号并仅打印 e 这本身是无效的 我正在使用 React 但我认为这个问题非常普遍 onChange event console log event target valu
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 如何从 bootstrap-markdown.js 调用 .getContent 和 .parseContent

    我是使用 Bootstrap 插件的新手 刚刚通过代码学院 http www codecademy com en skills make an interactive website 我真的很想用这个很棒的引导 Markdown 插件 ht
  • 如何绘制大时间序列(数千次给药次数/药物剂量)?

    我正在尝试绘制医院中如何开出单一药物的图解 在这个虚拟数据库中 我在 2017 年 1 月 1 日之后遇到了 1000 名患者 绘图的目的是了解该药物的给药模式 在接近入院 出院或患者住院期间是否更频繁 高剂量给药 Get random d
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c
  • 如何在 Erlang 中将数字转换为单词?

    我发现了一个关于将数字转换为 单词 的有趣问题 代码高尔夫 数字到单词 https stackoverflow com questions 309884 code golf number to words 我真的很想看看你如何在 Erlan
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO
  • 通过使用 navbarPanel() 并隐藏导航栏构建多页闪亮应用程序用户端(在 ui.R 中)?

    我想构建一个多页闪亮应用程序 我可以在其中控制用户可以看到哪个页面 迪安 阿塔利确实这个演示应用程序中有类似的东西 https github com daattali advanced shiny tree master multiple
  • 文件修改时间检查的成本

    对于Linux下包含少量字节的文件 我只需要处理自上次处理以来发生更改的时间 我通过调用 PHP 检查文件是否被更改clearstatcache filemtime 定期 由于整个文件总是很小 因此删除对 filemtime 的调用并通过将

随机推荐

  • 检查互联网连接

    我需要我的应用程序来检查用户计算机上的互联网连接 如果有 则显示图像 如果没有 则显示不同的图像 这是我用来让它工作的代码 Private Sub Window Loaded ByVal sender As System Object By
  • HTML5 Canvas 实时绘图

    问题 我怎样才能使putImageData 随着图像各个部分的计算 实时更新画布 我正在开发一个 JavaScript TypeScript 应用程序来在 HTML5 上绘制 Mandelbrot 集
  • 使用“verticalScroll”修饰符时如何禁用水平拉伸/过度滚动?

    我想要一个可滚动视图 我正在使用verticalScroll列上的修饰符 Column modifier Modifier verticalScroll rememberScrollState I could provide more de
  • 将图像与噪声进行模板匹配的最佳方法是什么?

    我有一个大图像 5400x3600 其中有多个我需要检测的闭路电视 旋转检测需要花费大量时间 4 7 分钟 但它仍然无法解决某些闭路电视问题 匹配这样的模板的最佳方法是什么 我正在使用 skImage openCV 不适合我 但我也愿意接受
  • 使用 htaccess 屏蔽域名和文件夹名称

    我正在尝试使用 htaccess 和 mod rewrite 用另一个域屏蔽一个域及其两个子文件夹 例如 http example com sub sub sub to http example 2 com 以便http example 2
  • 将剪贴板中的代码粘贴到多个输入字段中

    我一直在寻找 Vanilla Javascript 解决方案 将代码复制粘贴到多个输入字段中 我在互联网上找到了解决方案 但都是基于 jQuery 的 这是 jQuery 解决方案 https stackoverflow com quest
  • C#中线程的合理使用?

    作为大型自动化流程的一部分 我们正在调用第三方 API 该 API 执行一些调用另一台计算机上的服务的工作 我们最近发现 当另一台计算机不可用时 API 调用在尝试连接到远程服务器时有时会中断长达 40 分钟 我们使用的 API 没有提供指
  • 带条件的数字序列[重复]

    这个问题在这里已经有答案了 我有一个大 data frame 我想生成一个新列 称为 Seq 其中有一个顺序值 每次不同列发生更改时都会重新启动 下面是 data frame 省略了列 和名为 Seq 的新列的示例 正如您所看到的 有一个连
  • Cypress:如何模拟键盘(CTRL/SHIFT)操作

    如图所示 我在树中有这些元素 如果我按键盘中的 CTRL 并单击这些文本 我可以选择多个元素 它会提供执行某些操作的链接 使用 cypress 有什么方法可以实现此目的吗 我知道如果它是选择 我可以使用选择 在我的情况下 这些只是 ul 另
  • 如何将现有的 Block Blob 转换为 PageBlob

    我使用 CloudBerry 资源管理器将 VM Iaas 磁盘文件复制到另一个存储 但是当我完成复制后 我发现新创建的Blob是一个Block Blob 而不是Page Blob 该工具不会复制源 Blob 类型 页面 Blob 有没有办
  • java.lang.SecurityException 与 javax.servlet.servlet-api jar 的两个冲突版本

    我正在努力解决我无法解决的 Java Maven Jetty 问题 我有一个正确启动的 Java Jetty 服务器 但一旦向它发送 HTTP 请求 它就会中止显示此堆栈跟踪 2013 09 30 08 40 24 534 qtp29724
  • 虚拟构造函数习惯和工厂设计

    在虚拟构造函数习惯用法中 有一些虚拟函数可以使用虚拟函数返回新对象或对象的副本 但是要以多态方式调用这些虚函数 您必须使用实际的构造函数创建该类的对象 在设计模式上下文中 这意味着客户端在使用多态对象创建方式之前知道对象的类型 客户端不必知
  • java数组对象的所有索引都具有相同的值

    我有一个错误 当我使用我在类中创建的打印方法时 我的数组返回所有相同的值 我不知道为什么 它一定是不同的值 有什么建议吗 这是代码 主要类别 public class KmeanES param args the command line
  • 通过 javascript API 保存和恢复 Tableau 图形的当前视图状态

    问题 如何通过 javascript API 存储并随后检索 Tableau 视图的自定义状态 描述 我正在开发一个网站 目前允许任何用户将一组 Tableau 视图协作为类似 PowerPoint 的在线演示文稿以供以后使用 在我们当前的
  • 如何从当前文件路径向上导航一个文件夹?

    我需要从文件的当前路径向上导航一个文件夹 并在那里保存相同的文件 如何从目录路径中剥离一级 谢谢你 C Users stacy zim AppData Local Temp ICLocal e53486af 7e5e 4c54 b9dc d
  • 在 C# 中制作公式将美元金额转换为面额

    我正在编写一个程序 将任何输入金额转换为二十 十 五和个的面额 这是我遇到的问题 int twenties dollar 20 int tens twenties 2 int fives tens 2 int ones fives 5 美元
  • 第三方 Oracle .NET 提供商的比较

    我正在清理 Oracle 数据库应用程序 在此应用程序中 性能和易于访问是最重要的考虑因素 它必须不妨碍您 让您以自由且不受限制的方式获取数据 这样做的同时 必须very快速地 当它不能很快时 它必须是多线程的 这样才不会冻结系统 所有这些
  • 如何使用 vi 编辑器在 KornShell 命令行中自动完成

    在 KornShell ksh 上AIX UNIX 版本 5 3将编辑器模式设置为 vi 使用 set o vi 在 shell 命令行中按什么键可以自动完成文件或目录名 ESC 至少在 AIX4 2 上工作得很好 我注意到的一件事是它只自
  • 如何找到 OpenGL es 2.0 顶点着色器专业版中所有制服的列表

    我正在尝试学习如何对顶点着色器进行编程 在苹果的示例项目中 他们有一行来设置 glUniform1f uniforms UNIFORM TRANSLATE Glfloat transY 然后这个值被用在 value passt in f g
  • Zend_Framework- 在哪里放置 $_GET 和 $_POST (HTTP 请求)处理?

    我最近读过这个帖子 http blog astrumfutura com archives 373 The M in MVC Why Models are Misunderstood and Unappreciated html这导致了一系