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

时间:2012-07-31 10:09:02

标签: php zend-framework2

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

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

无论如何这是后面的故事,但基本上我需要弄清楚如何从表单元素中获取一个函数,以便在表单验证该元素时运行。类似于在表单元素类中创建onValidate()函数。

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

我想做这样的事......

class File extends Element implements InputProviderInterface
{

....

public function isValid()
{
    if ( $isValid = parent::isValid() ) {
        echo "Hi there, glad you called";
    }

    return $isValid;
}

1 个答案:

答案 0 :(得分:1)

每次验证运行都会调用Zend\Form\Element::getValidator()函数。

我认为你应该调用一个复制文件的类。 也许你想提出一个事件,使它更加分离。

验证和过滤现在是InputFilter类的一部分。 你的目标是编写一个专用的Validator并用你的元素硬连线。

如何实现这一目标的示例,请查看Zend\Form\Element\Select InArrayValidator方法中的onValidate()