如何在表单元素中挂接后验证函数


How do I hook in a post validate function in a form element

我正在编写一个更高级的文件表单元素,更像是一个显示当前加载的上传图像以及验证图像大小等的小部件。

如果文件有效,我希望表单元素本身将文件复制到可公开访问的文件夹中。这意味着a)可以显示图像,b)如果整个表单没有验证,用户就不需要重新上传图像。

不管怎么说,这就是背景故事,但本质上我需要弄清楚如何在表单验证该元素时从表单元素中获取函数来运行。类似于在表单元素类中创建onValidate()函数。

最重要的是,我需要一个不会泄露到控制器中的解决方案(或者尽可能少)。我正在努力寻找一种干净的方式来实现这一点。

我想做这样的事。。。

class File extends Element implements InputProviderInterface
{
....
public function isValid()
{
    if ( $isValid = parent::isValid() ) {
        echo "Hi there, glad you called";
    }
    return $isValid;
}

Zend'Form'Element::getValidator()函数将在每次验证运行时调用。

我认为你应该调用一个类,它关心的是复制文件。也许您想引发一个事件,使其更加解耦。

验证和筛选现在是InputFilter类的一部分。您的目标是编写一个专用的验证器,并将其与Element硬连接。

关于如何实现这一点的示例,请参阅Zend''Form''Element''Select,它在其onValidate()方法中是硬连线的InArrayValidator