Zend_Form 在模型视图控制器范式中适合什么位置

2023-11-22

The Zend框架主要用于 MVC 使用。非常有用的组件之一是Zend_Form.

我在寻找 Zend_Form 的位置时遇到了一些麻烦。它是视图、模型还是控制器的一部分,我应该赋予它哪些职责。

事实是,Zend_Form 做了两件事:装饰和渲染表单并验证它。第一个是真实的视图任务,第二个是真实的模型任务。

现在最常见的用途似乎是让表单仅与控制器交互,从而有效地将两个任务(渲染和验证)放入视图/控制器。

给出的另一个选项马修·威尔·奥芬尼是将表单附加到您的模型,并在控制器中添加稍后的视图选项。

所以,我很怀疑。我应该在 MVC 模式中的什么位置放置 Zend_Form 以及应该如何使用它?

Edit到目前为止很好的答案,谢谢!我将在赏金到期前一两个小时授予赏金,所以如果您有更多想法,请给出答案!


Zend_Form 可以在不同的点查看。它根本不能被视为 MVC 模式的一层的一部分。

首先 Zend_Form 使用装饰器和视图助手来渲染表单,此时它是视图层的一部分。 然后,Zend_Form 执行部分模型作业过滤和验证内容。

我们知道控制器层渲染来自视图的输入并将其传递给模型。实际上,控制器层决定从模型层加载哪些资源,然后执行正确的调用。

当您从控制器层调用 Zend_Form 时,您可以认为您正在调用一个模型资源来执行验证和过滤操作,并确定这是否是有效的输入。例如:

public function newAction()
{
    $form = $this->getForm();

    if($this->getRequest()->isPost()) 
    {
        $formData = $this->_request->getPost();

        if($form->isValid($formData))
        {
            $Model = $this->getModel();
            $id = $Model->insert($form->getValues());
        }
    }

    $this->view->form = $form;
}

将表单绑定到模型可以被认为是一种很好的实践,因为当您执行过滤和验证操作时,您位于模型层。因此,正如马太所提议的:

class Model_DbTable_Users extends Zend_Db_Table
{
    protected $_name = 'users';  
    protected $_form;

    public function getForm()
    {
        if(!$this->_form)
            $this->_form = new Form_User();
        return $this->_form;
    }

    public function add($data)
    {
        $form = $this->getForm();
        if(!$form->isValid($data)) return false;

        if($form->getValue('id'))
        {
            $id = (int) $form->getValue('id');
            $this->update($form->getValues(), 'id =' . $id);
        }   
        else
        {
            $id = $this->insert($form->getValues());
        }
        return $id;
    }
}

从标准目录结构中我们可以看到 Forms 不在模型文件夹中,也不在视图文件夹中,因为 Zend_Form 是一个将许多资源和层绑定在一起的特定类。如果您查看 Matthews 帖子,您会发现这正是在视图脚本上设置操作 url 并且将表单绑定到模型时所说的内容。

最后,您可以分析您的上下文并选择这两种方法之一。

目前,我的选择是将表单与模型联系起来。看起来不错!对我来说很有意义。

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

Zend_Form 在模型视图控制器范式中适合什么位置 的相关文章

  • zend 表单验证

    我想知道 Zend Form 如何验证输入 我的意思是它如何知道要验证哪些输入字段 我查看了 php 全局变量 POST GET 但没有看到任何设置为标识符 例如 的内容 以便了解如何验证 有人能给我推荐一些关于这些东西的指南吗 好吧 找出
  • 如何在没有 session_destroy 的情况下销毁 Zend_Session_Namespace

    我使用以下方法在临时会话中存储一些值 job new Zend Session Namespace application 我如何只销毁会话应用无需清除所有会话 要从会话中删除值 请对对象属性使用 PHP 的 unset 函数 假设 job
  • Yii:使用与控制器布局不同的布局渲染动作

    在 Yii 中 有没有办法使用不同的方式渲染单个动作layout比为控制器定义的值 我有一个操作希望其格式与其他操作不同 并且文档中不清楚这是否可能 我相信您可以调用该操作 layout多变的 public function actionY
  • Zend Framework - 需要从视图访问 GET 参数

    我正在使用 Zend 框架 我需要的是在我的视图中构造一个 url 通常 在常规 php 代码中 我只需使用全局 GET 获取 GET 变量 然而 对于 Zend 我将其设置为清理 URI 如下所示 ac 列表 过滤器 作品 页面 2 好像
  • Spring MVC http 500错误apache

    上面是我的程序的目录层次结构 我是 Spring 新手 正在学习 MVC 概念 我编写了一个程序 它将输入 名称 输入文本框并打印 Hello name 以下是我的目录结构和我创建的各种文件 web xml
  • Global.asax 和 Error.aspx 中的 ASP.NET MVC 错误日志记录

    我正在创建一个 ASP NET MVC 应用程序 我需要在两个地方处理异常 Global asax vb 文件 Public Class MvcApplication Inherits System Web HttpApplication
  • 如何从控制器访问 Zend Framework 应用程序的配置?

    我有一个基于 Zend 框架的应用程序快速开始 http framework zend com docs quickstart setup 我已经让演示工作起来 现在正在实例化一个新的模型类来完成一些实际工作 在我的控制器中 我想将配置参数
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp
  • Zend 框架会话丢失

    我有一个注册表单 当用户注册时 它会将他重定向到他的页面 在 Firefox 和 Chrome 中一切正常 但在 Internet Explorer 中则正常 看起来保存用户信息后 会话就关闭了 并且不会将用户重定向到他的页面 我该如何解决
  • zend框架验证模型中的数据而不是表单中的数据

    使用 Zend Framework 2 在我的应用程序中 要编辑数据库中的数据 可以编译 html 表单或发送 http post 请求 我的服务器作为 Web 服务实现 在第二种情况下 不会呈现表单 问题 如果当服务器收到不是从表单发送而
  • 如何检测iPhone是否有视网膜显示屏?

    如何检测 iPhone 是否配备视网膜显示屏 有靠谱的办法吗 要么是纯 PHP 要么最好是 Zend Framework 方式来执行此操作 我通过这个弄清楚了 var retina window devicePixelRatio gt 1
  • MVC 框架中的缓存策略?

    我编写了自己的小型 PHP MVC 框架 现在正在探索 PHP MVC 框架中的缓存策略 我正在考虑可以缓存什么 在哪里以及如何缓存 我的框架是简单的MVC框架 我有前端控制器 它启动应用程序 注册类自动加载 设置 php 运行时指令 最后
  • 关于存储库的领域驱动设计问题

    我正在尝试实现 DDD 因此我创建了以下类 用户 域模型 UserRepository 管理对象的中央工厂 UserMapper UserDbTable 映射应用程序功能并提供 CRUD 实现的映射器 我的第一个问题是 当模型需要与持久层通
  • php 发送带有图像的电子邮件

    我正在尝试发送一封带有图片的电子邮件 我的电子邮件正文是 当我收到电子邮件时 我看不到图片 相反 我 看 img src http planet earth bogus us icons secret pictures gif 我知道这是因
  • 使用Zend实现文件上传进度

    您好 我正在尝试使用 Zend 实现上传进度 但是我还没有找到任何详细的教程 指针会很有用 Thanks 我不记得曾经看过完整详细的教程来解释如何使用 Zend Framework 获取上传进度条 但这里有一些提示 如果您已经了解有关 PH
  • 404 路由无法匹配请求的 URL

    我刚刚开始学习zend 框架 questions tagged zend framework并遵循此用户指南 http framework zend com manual 2 3 en index html 我能够成功安装zend skel
  • MVC:如何使用ajax?

    我将使用 Zend Framework MVC 实现启动一个项目 我如何使用ajax 我的意思是 我应该将所有 ajax 代码放入控制器中吗 还是进入视野 例如 我想将作者 ivan 的帖子显示在页面上 通常 我创建一个指向 posts a
  • MVC 模式中的验证层

    验证模型将使用的数据的最佳位置在哪里 例如 考虑登记表 我们有一些来自注册表的数据 那么验证这些数据的最佳位置在哪里 我们应该通过 if 语句或特殊的验证器类来检查每个数据 这意味着大量的编码 所以我想了解在哪里可以做到这一点 在控制器中
  • PHPUnit 和 Zend Framework assertRedirectTo() 问题

    我在创建的测试中遇到了 assertRedirectTo 问题 下面是我使用的代码 public function testLoggedInIndexAction this gt dispatch this gt assertControl
  • Zend Framework 生成唯一的字符串

    我想生成一个唯一的 4 6 个字符长的字母数字字符串 以便与每个记录 用户 一起保存在数据库中 db 字段具有唯一索引 因此尝试保存预先存在的字符串会生成错误 现在我正在生成一个随机字符串并使用 try catch 因此在添加新记录时如果抛

随机推荐

  • 如何在不使用框架集的情况下仅缩放 IFRAME 内容?

    我只需要缩放框架内容 在我的网页中我使用了zoom 0 75 height 520px width 800px 如果我增加缩放值 则意味着帧尺寸将会增加
  • glClear() 如何提高性能?

    Apple 关于解决闪烁问题的技术问答 QA1650 包括以下段落 强调我的 您必须为屏幕上的每个像素提供一种颜色 在绘图代码开始时 最好使用 glClear 来初始化颜色缓冲区 在帧开始时全屏清除每种颜色 深度和模板缓冲区 如果您正在使用
  • SMJobSubmit() 可以用来执行 SMJobBless 安装的特权助手吗?

    我一直在阅读文档和 SMJobBless 示例以及互联网上的各种讨论 我的应用程序现在使用安装特权助手SMJobBless 但助手根本不运行 帮助程序的全部目的是在应用程序启动时加载 kext 这是我的应用程序的重要组件 我看到的例子表明
  • zend 形式的数组输入,如 name="person[]"

    在普通的 html 中 我们可以有一个数组字段 例如person
  • 单个 Prisma 查询中的 LEFT JOINS 和聚合

    我有一个包含多个表的数据库 经常需要查询LEFT JOIN以便结果包含来自其他表的聚合数据 我的 Prisma 架构的片段 model posts id Int id unique default autoincrement user id
  • 使用变量作为格式指令的前缀参数

    我需要打印一些前面有可变数量空格的内容 例如 如果我需要在文本前打印 5 个空格 我会这样做 format T 5T My Text Output My Text 我可以使用变量来代替 5 并能够向其传递值吗 我正在寻找的是这样的 form
  • Twilio React Native - 无法解析模块加密

    我正在努力实施twilio打包到我的反应本机项目中 当我在文件中需要它时 项目将无法加载 并且我看到以下错误 Unable to resolve module crypto from Users myname Documents Proje
  • AWS 和 Terraform - 安全组中的默认出口规则

    我在许多提供者是 AWS 的 Terraform 项目中看到了可重复的配置 配置出站 出口 规则以允许所有出站流量 据我了解 这是 AWS 中的默认行为 如AWS 用户指南 默认情况下 安全组包含允许所有出站流量的出站规则 您可以删除规则并
  • Delphi有没有允许路径编辑的编辑控件?

    我有各种层次结构 并且希望使用编辑器 例如下面的资源管理器地址栏中找到的 Microsoft 编辑器 进行导航 Delphi有这样的组件吗 付费还是免费 TMS 的 TAdvExplorerTreeview 可能就是您所寻找的 http w
  • 如何基于 stanford-nlp 条件随机场模型训练法国 NER?

    我发现了 stanford NLP 的工具 发现它真的很有趣 我是一名法国数据挖掘者 数据科学家 喜欢文本分析 并且很想使用你们的工具 但是 NER 在法语中不可用 这让我很困惑 我很想制作自己的法语 NER 如果认为值得的话 甚至可能将其
  • 我可以从 scala 中的重载方法中获取函数吗?

    假设我定义了两个具有相同名称和返回值但参数不同的方法 def overload x Int x toString def overload s String s 现在我想将其中之一转换为函数 如果该方法没有重载 我会这样做 val f ov
  • 继承自 ObservableCollection 的集合 - 有什么好处?

    看完之后这篇 MSDN 文章 我现在想知道将集合定义为继承自的类有什么好处 如果有的话 ObservableCollection 这之间是否有任何显着差异 class MyCollection ObservableCollection
  • 使用基于 $resource 的服务进行部分更新(又名 PATCH)?

    我们正在使用 Django TastyPie 作为后端 REST 服务提供者构建一个 Web 应用程序 并构建一个基于 AngularJS 的前端 使用大量基于 resource 的服务来对服务器上的 CRUD 对象进行处理 到目前为止一切
  • XSLT 1.0 三元 if 的惯用语?

    该 Java 程序使用三元 if 将布尔值映射到输出字符串 表示 true 空字符串表示 false public class ternary public static void main String args boolean flag
  • Java Socket - 本地端口

    我正在学习 Java 的套接字编程 我使用以下语句连接到网站 s new Socket www nba com 80 当我调试应用程序并查看 s 的内容时 我看到 Socket addr www nba com 2 21 246 97 po
  • 多模块 m2eclipse/WTP 项目能否将实用程序模块部署到 WEB-INF/类中?

    我们目前使用 MyEclipse 及其内置 Maven4MyEclipse 集成和内置 J2EE 服务器支持 但希望转换为常规 Eclipse 特别是 Helios 以便能够在 Windows 上使用其 64 位安装 MyEclipse 尚
  • Swift 4 UICollectionView 检测滚动结束

    我有一个Horizontal UICollectionView在我的应用程序上 当用户在左侧拖动时到达 UICollectionView 的末尾 或接近末尾 时 我想加载更多数据 我正在使用 Swift 4 我找到了一些 Swift 3 解
  • C# 中的 Powershell 命令

    我正在尝试查询 root CIMV2 命名空间中所有 WMI 类的名称 有没有办法使用 powershell 命令在 C 中检索此信息 沿着基思的方法 using System using System Management Automat
  • 为什么我的安装项目无法执行我的自定义注册过程

    我正在尝试为我使用 Visual Studio 2008 用 C 编写的类库驱动程序编写一个安装项目 安装程序 该驱动程序项目有一段代码如下所示 ComRegisterFunction public static void Register
  • Zend_Form 在模型视图控制器范式中适合什么位置

    The Zend框架主要用于 MVC 使用 非常有用的组件之一是Zend Form 我在寻找 Zend Form 的位置时遇到了一些麻烦 它是视图 模型还是控制器的一部分 我应该赋予它哪些职责 事实是 Zend Form 做了两件事 装饰和