验证应该在 Form 对象中还是模型中完成?

2024-02-07

这个问题主要针对PHP中的Zend,尽管它当然也适用于其他语言和框架,所以我欢迎大家的意见。

我最近才开始使用 Zend 框架,虽然它并不完美,但我用它玩得很开心。然而,让我发疯的一件事是,我看到的大多数使用 Zend 的人的例子都是特殊形式对象的验证 http://framework.zend.com/manual/en/zend.form.advanced.html,而不是在模型中。我认为这是不好的做法,因为数据可以通过表单输入之外的其他方式进入系统,这意味着验证器必须弯曲和扭曲才能验证其他输入,或者验证必须在第二个地方完成,并且逻辑重复。

我发现了一些其他帖子和博客,其中有人和我有同样的感觉,但是 Zend 的开发人员做出这个选择是有原因的,而其他人似乎使用它没有问题,所以我想得到一些反馈来自这里的社区。

正如我所说,这主要适用于 Zend,尽管我认为从整体上看待问题很重要,而不是在 Zend 框架的范围内工作,因为 Zend 的设计目的是让您可以使用尽可能多的内容,也可以使用尽可能少的内容,如你所愿。


这是一个非 zend 特定的答案,但我认为模型应该对其自身数据的有效性负责。如果是这种情况,那么验证属于模型中,但是这可能并不总是可以实现,并且可能有必要在视图中执行验证,但是我认为这应该是在模型中执行的验证之外的补充,而不是替代为了它。

仅在视图中进行验证的问题是,在某些时候您可能需要对数据进行另一个视图。您的网站可能会变得流行,并且客户会要求基于 XML 的 API 来生成他们自己的视图。那么您是否依赖客户来验证数据?

即使您不必提供 API,一些客户也可能需要足够不同的自定义视图,以保证页面版本完全不同,现在您再次在重复的视图中进行验证。

我认为理想的情况是让您的模型进行验证,但使验证结果可供视图读取并再次渲染页面并显示验证结果。

我认为,如果您想立即将验证数据显示给用户等,那么让视图进行验证是完全合理的,但数据有效性的最终决定应由模型决定。

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

验证应该在 Form 对象中还是模型中完成? 的相关文章

  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • Zend_Cache_Backend_Sqlite 与 Zend_Cache_Backend_File

    目前我正在使用 Zend Cache Backend File 来缓存我的项目 尤其是来自外部 Web 服务的响应 我在想是否能找到将结构迁移到 Zend Cache Backend Sqlite 的一些好处 可能的优点是 文件系统有序 缓
  • 脚本超时已过,如果要完成导入,请重新提交相同的文件,导入将恢复

    我有一个数据库 拉开拉链后的尺寸50mb拉链尺寸7mb所以当我尝试导入数据库时zipped 7mb 几分钟后 它抛出此错误 脚本超时已过 如果您想完成导入 请resubmit相同的文件和导入将恢复 我已经重新提交了 但仍然没有导入全部数据
  • Graph API / FQL 不返回页面的所有事件

    脸书页面 http facebook com getwellgabby events http facebook com getwellgabby events 目前有 8 个活动 我能看到他们 非管理员可以看到它们并可以加入它们 但是 当
  • 通过 PHP CURL 添加 Google 联系人

    我已经成功地通过 Zend Framework 和 PHP 将联系人添加到 google 我也希望能够通过 CURL 来做到这一点 有人有关于如何执行此操作的良好教程吗 我终于能够通过 CURL 和访问令牌来做到这一点 首先 我要说的是OA
  • 如何在 Laravel 5.3 中进行自定义身份验证

    我在 Laravel 5 3 自定义身份验证中遇到问题 希望在检查时使用我自己的函数或页面Auth check 它返回false 这是用户控制器 namespace App Http Controllers use App User use
  • 从存储库获取时,Doctrine 如何在不调用 __construct 方法的情况下创建实体?

    我在构造函数中编写了下一个代码 public function construct die creating entity 当我创建实体实例时new运算符如 entity new Entity 我看到creating entity text
  • 验证以防止角度形式出现重复的形式值

    我有几个表单数组 我需要进行验证 以便每个表单行中的特定字段在所有表单数组中必须是唯一的 如果任何值出现多次 则两个表单字段都必须标记为红色 我设法编写了一个函数 以便如果这些字段有任何更改 该函数将返回 true false 但我不确定如
  • PHP 5.4 PDO 无法使用旧的不安全身份验证连接到 MySQL 4.1+

    我知道有很多类似的问题 事实上我已经阅读了所有 9 个问题 但是 他们都没有解决我的问题 我有一个共享托管包 最低限度 我的包中包含域名和托管 MySQL 服务器的单独 IP 地址 为了开发 我正在使用http localhost 与 PH
  • PHP-向某些浏览器显示消息

    我已经搜索过这个 我发现的一切都超出了我的需要 我以前用 JavaScript 做过这个 但我真的更喜欢使用 PHP 我将如何根据访问者使用的浏览器向他们显示消息 Example IE 用户会看到 您正在使用 Internet Explor
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • 为什么 count 比 $count 差

    我只是在查看不同问题的答案以了解更多信息 我看到一个answer https stackoverflow com a 4891402 429850这表明在 php 中编写这样的做法是不好的做法 for i 0 i
  • PHP 7.2 计数错误

    警告 count 参数必须是数组或对象 实现 Countable in 我在以下行中收到上述错误 if 0 gt count this gt xprop 有人可以帮助我理解这一点吗 我对 PHP 还很陌生 问题显然是 this gt xpr
  • 如何访问带有美元符号的 PHP 对象属性?

    我有一个 PHP 对象 其属性中有一个美元 符号 如何访问该属性的内容 例子 echo object gt variable Ok echo object gt variable WithDollar Syntax error With 变
  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • 使用 Laravel Socialite 登录 facebook

    然而 我是 Laravel 的新手 我正在遵循以下教程http www codeanchor net blog complete laravel socialite tutorial http www codeanchor net blog
  • Ace Editor 自动完成和多种语言

    如何为 Ace 编辑器创建自动完成功能以及如何突出显示 php 中的 html javascript 和 csshttp ace ajax org http ace ajax org
  • snappy wkhtmltopdf 包装器将生成的 html 文件发送到浏览器

    我像鼹鼠一样用谷歌搜索 但找不到正确的方法 我正在使用 WKHTMLTOPDF Wrapper Snappy 创建 PDF 如何将使用generateFromHtml方法生成的pdf直接发送到浏览器 这就是我想做的 header Conte
  • 使用 .htaccess 进行 PHP 设置时出现 500 内部服务器错误

    当我使用时 htaccess对于以下 PHP 设置 我得到500 Internal Server Error访问网站时 中的代码 htaccess file php flag display errors off php flag log
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误

随机推荐

  • Java:Eclipse 和 javac 中的泛型处理方式不同

    说我们有课 public class Entry
  • 如何在 php / Laravel 5 中解析 SimpleXMLElement?

    我使用 Guzzle 向后端的外部 API 发出 XML 请求 这是我创建 Guzzle 客户端的地方 client new Client GuzzleHttp Client 这是我提出请求的地方 request client gt req
  • 无法将ubi附加到mtd分区

    我们在基于 DM365 的定制板中使用 MT29F8G08ABABA 我们使用的是 NAND 启动 RootFS采用UBIFS格式 Below is basic achitecture of the NAND 我正在使用以下命令来创建 ub
  • 排队操作(不是效果)在一段时间后执行。

    我想知道是否有一种好的方法可以将 jQuery 函数排队以在设定的时间后执行 这不会暂停其他函数的执行 只会暂停链中后续函数的执行 也许我设想的一个例子可以说明 alert show wait 5000 lt this bit hide 我
  • 逐字符绘制文本时的字距调整问题

    我正在尝试逐个字符地绘制字符串 以便为由文本组成的形状添加灯光效果 while i line length c line substring i i 1 cWidth g getFontMetrics stringWidth c g dra
  • 数据读取器如何工作?

    我在想如果没有连接到 SQLServer SQLDataReader 不应该工作 我实验了这个场景 我执行 ExecuteReader 然后停止 SQLServer 服务并尝试迭代 DataReader 我期待的是一个例外 但它却给出了一个
  • 如何将 NestJS 中的服务注入到 typeorm 存储库中?

    我有一个UserRepository它处理在数据库前面创建 验证用户 我想对用户的密码执行哈希和验证 因此我为此创建了一个单独的服务 尝试遵循单一责任原则 其声明如下 Injectable export default class Hash
  • jeditable 意外触发嵌套项目上的 Draggable

    我使用jquery ui的draggable进行拖放 并且可编辑的 http www appelsiini net projects jeditable用于内联编辑 当我拖放一个也可编辑的元素时 在它被放置后 jeditable 立即启动并
  • 防止/限制方法继承

    我有一个应用程序 其中许多对象都扩展一个抽象类 该类定义了类似的方法create edit retrieve and delete 由于每个子类对这些函数都使用相同的逻辑 因此抽象类定义了默认行为 并且在需要增强的少数情况下 子类可以覆盖或
  • Bootstrap 导航栏垂直显示而不是水平显示

    我正在使用 CodePen 开发一个项目 并使用 bootstrap 来制作导航栏 但由于某种原因 它是垂直显示而不是水平显示 即使我从W3学校 https www w3schools com bootstrap bootstrap nav
  • maven中的“pom”包装是什么?

    我得到了一个 Maven 项目来编译并部署在 tomcat 服务器上 我今天之前从未使用过 Maven 但我已经在谷歌上搜索了很多 貌似是顶级水平pom xml该项目中的文件的打包类型设置为pom 之后我应该做什么mvn install部署
  • Java查询数据库后返回一个数组

    我必须查询 MSSQL 数据库 并且希望查询结果作为 Array 或 ArrayList 返回 我现在有这个代码 但它给出了一个错误 我有到数据库的连接 所以这不是问题 public ArrayList
  • 在 Linux 上嗅探数据包时过滤网络堆栈中的数据包?

    我有一个问题要问底层网络 Linux 专家 我必须为我大学的安全项目构建两个工具 第一个工具是 ARP 中毒攻击者 它会毒害远程主机的 ARP 缓存 以便检索他发送到另一台主机的数据 我使用原始套接字用 C 语言编写了这个工具 它工作得很好
  • 选择数据表中的所有 jsf primefaces

    我正在尝试创建一个全选按钮或复选框 单击该按钮或复选框时 所有 selectbooleanCheck 框都会被选中 有没有直接简单的方法 我开始创建 selectcheckbox 当更改时它将 selectAll 谢谢
  • 如何在输出文件中抑制 stargazer() 信息

    我正在使用stargazer将 R 数据帧输出为乳胶代码的包 library stargazer stargazer mtcars 这是输出 Table created by StarGazer v 3 0 1 by Marek Hlava
  • 如何重新初始化 jQuery DataTables 上的数据排序?

    我在我的项目中使用 jQuery Datatables 并且通过使用属性在列上提供了 自定义值 排序data sort如此处所述 https datatables net examples advanced init html5 data
  • Android Studio“提取方法”快捷键 Ctrl+Alt+M 不起作用

    The android studio shortcut for extract function is not working for me If I press Ctrl Alt M nothing is happening and wh
  • AWS C++ S3 SDK PutObjectRequest 无法连接到端点

    在使用 AWS C SDK 时 我遇到了一个问题 即尝试执行 PutObjectRequest 时会抱怨上传超过 400KB 时 无法连接到端点 Aws Client ClientConfiguration clientConfig cli
  • 在knitr Latex文档中缩放图形

    我正在尝试将图表包含到带有knitr的乳胶文档中 由于 knitr 包含 webshot 包 因此效果很好 但是 如果我想调整乳胶输出的图形大小 图形环境会变大 但绘图图表不会被调用到手动设置的图形宽度和高度 指定 webshot 选项 例
  • 验证应该在 Form 对象中还是模型中完成?

    这个问题主要针对PHP中的Zend 尽管它当然也适用于其他语言和框架 所以我欢迎大家的意见 我最近才开始使用 Zend 框架 虽然它并不完美 但我用它玩得很开心 然而 让我发疯的一件事是 我看到的大多数使用 Zend 的人的例子都是特殊形式