Php 如何在表单元素中挂接post validate函数

Php 如何在表单元素中挂接post validate函数,php,zend-framework2,Php,Zend Framework2,我正在编写一个更高级的文件表单元素,更多的是一个显示当前加载的上传图像以及验证图像大小等的小部件 如果文件有效,我希望表单元素本身将文件复制到一个可公开访问的文件夹中。这意味着a)可以显示图像,b)如果整个表单未验证,用户无需重新上传图像 不管怎样,这是背景故事,但本质上我需要弄清楚如何从表单元素中获取函数,以便在表单验证该元素时运行。类似于在表单元素类中创建onValidate()函数 最重要的是,我需要一个不会溢出到控制器中(或尽可能少)的解决方案。我正在努力寻找一个干净的方法来实现这一点

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

如果文件有效,我希望表单元素本身将文件复制到一个可公开访问的文件夹中。这意味着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类的一部分。 您的目标是编写一个专用的验证器,并将其与您的元素硬连接起来


一个如何实现这一点的示例,看看哪个作为其
onValidate()
方法中的硬连线
inarayvalidator

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

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

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


一个如何实现这一点的例子,看看它作为一个硬连线的
inarayvalidator
,在它的
onValidate()
方法中。

谢谢Samuel,我最终创建了一个可以执行操作的过滤器。在花费大量时间尝试创建InputFilter之后,我发现InputFilter类本身只是验证器和过滤器的结构。我真的不喜欢我的解决方案,因为我认为在过滤器中放置操作代码不是一种很好的方法。但是我想要一些封装。我想在使用ZF2的几个月后,我将能够回来重构。嗯,也许你的验证器可以引发一个“FileValides”事件,然后由一个专门提供和复制这些文件的类来处理。alternativley验证程序可以在验证成功后调用它。只是别忘了注入那个类。谢谢Samuel,我最终创建了一个可以执行操作的过滤器。在花费大量时间尝试创建InputFilter之后,我发现InputFilter类本身只是验证器和过滤器的结构。我真的不喜欢我的解决方案,因为我认为在过滤器中放置操作代码不是一种很好的方法。但是我想要一些封装。我想在使用ZF2的几个月后,我将能够回来重构。嗯,也许你的验证器可以引发一个“FileValides”事件,然后由一个专门提供和复制这些文件的类来处理。alternativley验证程序可以在验证成功后调用它。只是别忘了注入那个类。