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 在模型视图控制器范式中适合什么位置 的相关文章

  • 每个月的第一天

    如果我从当前日期开始 如何获得每个月的第一个星期五 我正在考虑使用 date gt get Zend WEEKDAY 并将其与星期五进行比较 然后与 DAY 进行比较 并检查它是否小于或等于 7 然后添加 1 个月 一定有更简单的东西吗 怎
  • 使用 ViewModel 设计 MVC 存储库

    我想创建一个存储库类来将我的数据逻辑与控制器分开 我使用 ViewModel 来表示一些数据 这些数据将填充来自不同表的数据 我有一些问题 对于像这样的方法GetAll 我要返回一个IQueryable
  • 在 Zend Framework 应用程序中,/views/filters 有什么用途?

    我知道视图助手的作用 view helpers 但我不知道视图过滤器 view filters 是什么 或者它的用途是什么 有人可以解释一下这个问题吗 谢谢你 在渲染视图结束时 Zend View 将输出传递给您已注册的任何过滤器 方法是调
  • 禅德导航。带有自定义选项的子菜单

    在我的布局脚本中 我也需要生成 渲染我的菜单 如果菜单项有一个子菜单 我会更改我的菜单项 以便它会呈现 li 原因是我会有一张图片 li li 网页元素存在 ul li a href da front news Nyt a li li cl
  • 我应该如何创建模型类来调用API(使用MVC模式)?

    目前我正在调用一个APIviewcontroller但这本身并不是 MVC 的良好编程实践 这是我的代码 void fetchData NSMutableURLRequest request NSMutableURLRequest allo
  • Doctrine2大合集

    在过去的几天里 我一直在玩doctrine2 ZF 设置 我仍然无法弄清楚的一件事是大型数组集合关联 例如 假设我们有一个名为 Post 的实体 每个帖子可以有很多评论 现在 如果我这样做 这将加载所有评论 post gt comments
  • 如何使用 zend paginate 而不加载数据库的所有结果

    所以我认为 zend paginate 工作的方式是 paginator Zend Paginator factory results paginator gt setItemCountPerPage itemCount paginator
  • 这叫什么类型的建筑?

    对于我当前正在开发的 Web 应用程序 ASP NET MVC 我们采用以下架构 Data Access Layer 将数据持久保存到任意数据库的逻辑 Domain 数据模型 Service Layer 业务逻辑 例如订单处理 账户管理等
  • 是否值得将 Doctrine 2 与 Zend Framework 一起使用?

    我知道有些用户在 Zend Framework 中使用 Doctrine 2 而不是 Zend Db 但我不知道为什么 为什么 Doctrine2 比 Zend Db 好 为什么 Zend Db 不好 Thanks 2013 年 3 月 7
  • Joomla 模型视图控制器 (MVC) 如何工作?

    我是 Joomla 的新手 我想知道 Joomla 控制器如何将数据传递给模型 模型传递给控制器 以及控制器传递给视图 虽然这可能是一个愚蠢的问题 但我确实试图找到答案 我希望我能从 stackoverflow 大家庭得到一些帮助 控制器获
  • 如何自定义 Zend_Form 正则表达式错误消息?

    我有以下代码 postcode form gt createElement text postcode postcode gt setLabel Post code postcode gt addValidator regex false
  • 在 mvc 中对远程验证的成功响应执行一些操作

    我正在使用远程验证来检查我的 asp net mvc 3 应用程序 C 注册期间用户名的可用性 我使用 MVC 远程属性验证 Remote IsUserNameAvailable User public string UserName ge
  • Model在MVC中的作用是什么?

    我读过一些有关 MVC 的文章 但有一点我不清楚 该模型在实际中的作用是什么 模型是否代表业务对象 或者它只是一个帮助将信息从控制器发送到视图的类 以两个业务类为例 从数据库填充数据 Class Image Property FileNam
  • MVC和依赖注入,被迫使用单例Controller?

    我正在致力于构建一个根据 MVC 原则运行并利用依赖注入的 PHP 框架 我想我已经把前端控制器部分放下了 有一个工作路由器实例化控制器实例并根据请求的 URI 调用适当的操作 接下来是依赖注入 我想实现一个使用反射解决依赖关系的容器 这样
  • 如何在 Zend Framework 中处理移动设备?

    我接手了一个噩梦般的项目 我正在迁移一个写得很差的站点 并慢慢地将其迁移到 Zend Framework 应用程序中 不幸的是 我没有时间做补救工作 使这变得可以忍受 也许是一个或两个模型 我现在被告知该网站很快就会有移动版本 建议是克隆旧
  • Java 和 GUI - 根据 MVC 模式,ActionListener 属于哪里?

    我目前正在编写一个模板 Java 应用程序 不知何故 如果我想完全遵循 MVC 模式 我不确定 ActionListener 属于哪里 该示例基于 Swing 但它不是关于框架 而是关于 Java 中 MVC 的基本概念 使用任何框架创建
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • 如何在MVC模型中编写可重用的业务逻辑?

    我的问题是我们尝试使用 MVC PHP 框架 经过多次讨论后 我认为 MVC 非常好 但我缺少编写可重用模型 应用程序 逻辑的可能性 因此 我不确定我们是否有正确的方法在 MVC 框架中实现我们的软件 首先 我将描述我们目前使用的非 MVC
  • 将变量发送到 Zend Framework 中的布局

    在我的项目中 我有许多动态元素 它们在每个页面上都是一致的 我已将这些放入我的layout phtml中 我的问题是 如何从控制器将变量发送到布局中 如果我想从我的控制器发送东西 我可以使用 this gt view gt whatever
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new

随机推荐

  • 如何在不使用框架集的情况下仅缩放 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 做了两件事 装饰和