本集来自大象之声 http://voicesoftheelephpant.com/?s=Matthew+Weier+#podPressPlayerSpace_1, 开始谈论Zend_Form
如何Zend\Form
将于 22:00 左右出现在 Zend Framework 2 中。
过滤和验证附加到模型而不是绑定到表单,这允许在模型级别拥有业务规则(验证和过滤)。
我正在使用 Zend Framework 1.11 进行开发,我的模型是 Doctrine 2.2 实体:如何将过滤器和验证链附加到我的实体?
我想验证实体@LifecycleCallbacks
或者将过滤和验证附加到实体本身。这样,无论数据来自何处(无论是来自 Web 表单上下文还是来自 Web 服务,甚至是命令行上下文),我都可以在将数据刷新到数据库之前对其进行验证。
任何帮助和代码示例将不胜感激。谢谢你!
根据我对 ZF2 Forms RFC 的理解http://framework.zend.com/wiki/display/ZFDEV2/RFC++-+Forms http://framework.zend.com/wiki/display/ZFDEV2/RFC+-+Forms您将能够通过在属性上声明过滤器/验证注释来注释模型/实体。
然后,您必须将模型绑定到表单对象,表单将读取任何相关注释并将其应用到自身。我在这个实现中看到的一个问题是,验证/过滤逻辑仍然没有真正的分离,因为这些定义封装在表单对象中。
更好的(我不知道这是否在管道中)是让表单对象调用模型上的验证例程。当然,可以模拟 Form 组件在模型中的功能(通过阅读注释)并在本地应用(在 ZF2 中)。该组件目前正在开发中,因此我肯定有兴趣在其接近完成时玩一玩。
无论如何,对于 ZF 1.11(我自己也使用过这个实现),您可以在模型中定义验证例程,并且 $model->validate() 生成的任何错误消息都可以注入到 Zend Form 错误堆栈中。
// element
$form->getElement('my_element')->addErrors($model->getErrorMessages());
// form
$form->addErrors($model->getErrorMessages());
所以你最终会得到一个类似的实现;
$form = new My_Form();
if ($this->_request->_isPost())
{
$data = $this->_request->getPost();
$model = new \Entities\MyModel();
$model->populate($data);
if (!$model->isValid())
{
$form->addErrors($model->getErrorMessages());
}
if ($form->isValid())
{
// continue to save the model etc...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)