Model view controller Zend模型验证

Model view controller Zend模型验证,model-view-controller,zend-framework,validation,zend-validate,Model View Controller,Zend Framework,Validation,Zend Validate,我正在开发Zend应用程序,但对Zend没有太多经验,所以只能依靠我的RubyOnRails经验 从几篇文章中,我发现大多数验证都是在表单级别实现的——使用Zend_表单。但对我来说这看起来有点奇怪-如何在模型级别进行验证-基于表单数据创建一个模型并运行smth,如$model->isValid()这很有意义,因为我正在创建一些没有表单post请求的模型 我当前的模型流: ProductMapper extends Zend_Db_Table Product extends Zend_Db_Ta

我正在开发Zend应用程序,但对Zend没有太多经验,所以只能依靠我的RubyOnRails经验

从几篇文章中,我发现大多数验证都是在表单级别实现的——使用Zend_表单。但对我来说这看起来有点奇怪-如何在模型级别进行验证-基于表单数据创建一个模型并运行smth,如
$model->isValid()这很有意义,因为我正在创建一些没有表单post请求的模型

我当前的模型流:

ProductMapper extends Zend_Db_Table
Product extends Zend_Db_Table_Row
考虑到我正在做的事情

$mapper = new ProductMapper();
$product => $mapper->find(...);

// Do some staff with this model
// And want to check if it's valid before saving

if ($product.isValid()) {
    $product.save(); // Zend_Db_Table_Row method
} else {
    ...
}
我意识到我可以简单地在
isValid
方法中使用RegExp进行验证,但是我想使用
Zend_Form
中已经实现的方法,比如
addValidator
addFilter
以及所有有用的东西

这也是Zend中管理模型的正确方法吗?


任何帮助或建议都将不胜感激

您可以使用与Zend_表单相同的过滤器和/或验证器,但如下所示

$validator = new Zend_Validate_Allnum();
if ($validator->isValid($data)
do some code


因此,您可以在row类中创建自己的方法isValid(),在该方法中,您可以执行自己的验证和筛选值的逻辑

Zend中的模型不仅是Db对象的表示,实际上大多数对象与数据库无关,而且是业务逻辑的模型。在这种情况下,使用全局验证方法是没有意义的。Zend_Db_Table and Row将在播放Db对象时为您执行一些检查,例如检查主键,但如果您想要Active Record之类的内容,您必须自己扩展这些类。

我不同意Db层(ZF objects Table,Row)是正确的验证位置。IHMO验证是应用程序逻辑或业务约束

验证过程必须放在混凝土模型中。数据库层必须是干净的,只负责简单的数据库操作(插入、更新、删除、选择)

您的模型必须知道哪些属性是必需的(或属性的数据类型),以便有一个正确的验证位置

由于Elzo-某些模型不代表DB对象-因此您应该使interfaceIPersistencable具有一种方法验证数据库驱动模型。这些模型必须实现自己的验证算法


这种方法很有用——每个模型都有不同的验证方法。下一种方法-您可以使用主键的基本验证+验证方法创建抽象类,并且每个可持久化模型都扩展了该类。

同意,但由于
Zend\u Db\u Table\u Row
是Db Row的表示,因此它具有验证是有意义的。基本型号不需要,看起来很容易猜。我应该检查Zend lib文件夹:)谢谢!
$filter = new Zend_Filter_StringTrim();
$filteredVal = $filter->filter($val);