我正在使用 Zend Framework 和 jQuery 开发 MVC 应用程序。我的模型由三层组成:服务层、映射器、域模型。
迄今为止,我一直在努力处理输入验证 - 有些发生在客户端,有些发生在 Zend Form 中,有些发生在域模型中。职责变得困惑,并且有很多重复的逻辑。
经过深思熟虑,我看不出有什么理由不跳过任何 Zend Form 验证。我可以使用 javascript 验证简单的事情(包括正则表达式),并在需要时(通过 ajax)从服务器获取其他数据。当表单通过验证时,我会将其传递到服务器。
当然,我的域模型逻辑需要全面(复制客户端上的所有内容),但是域模型还有什么用途,对吧?
我错过了什么吗?有什么需要注意的问题吗?
编辑:需要明确的是,我根本不建议放弃服务器端验证。 (我意识到这是势在必行的。)我建议如果我的领域模型做到了这一点,那么也没有必要在表单中做到这一点。
最佳答案
您的域不适合在客户端上执行“之后”执行任何操作。
换个 Angular 思考:您在服务器上进行验证,并且额外在客户端上进行验证以使用户满意。
首先,您应该确保您想要验证的事情应该首先在域模型上完成(可能在 set() 方法中)。
然后您也可以(作为用户的额外功能)在客户端上执行此操作,但这只是为了让用户更快地反馈输入过程中出现的错误。永不替代。它永远不会阻止用户做一些使您的模型处于无效状态的事情。
此外,当您使模型持久化时,您应该始终检查它是否处于有效状态。无效的内容将使其无效,因此您不应该保存它。此外,当您将更改应用于应用程序中的多个模型(实体)时,请确保执行事务以验证这两个模型,并确保其中没有一个模型保存为无效状态。
关于javascript - 忘记使用良好的域模型进行服务器端表单验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17357124/