inputfilter中存在文件_的用法

inputfilter中存在文件_的用法,filter,zend-framework2,zend-form,zend-filter,Filter,Zend Framework2,Zend Form,Zend Filter,我想使用一个过滤器,将检查是否上传了照片。实际的上传不会发生在表单中,而是由javascript执行。 因为每个用户的文件名都不同,所以我尝试添加一个过滤规则来检查上传的文件是否存在。当文件不存在时,我将在视图中用$this->formElementErrors($this->form->get('photo')显示一个错误 我已经在过滤器外部(仅在控制器中)测试了验证器,这将毫无问题地工作。解决方案应该类似于下面的代码 $filter = new \Application\Form\SomeF

我想使用一个过滤器,将检查是否上传了照片。实际的上传不会发生在表单中,而是由javascript执行。 因为每个用户的文件名都不同,所以我尝试添加一个过滤规则来检查上传的文件是否存在。当文件不存在时,我将在视图中用$this->formElementErrors($this->form->get('photo')显示一个错误

我已经在过滤器外部(仅在控制器中)测试了验证器,这将毫无问题地工作。解决方案应该类似于下面的代码

$filter = new \Application\Form\SomeFilter(); // Existing filter rules.
$filter->add(array( // Add rule. There is no photo record available in SomeFilter()
  'name' => 'photo',
  'required' => true,
  'validators' => array(
    array(
      'name' => 'Zend\Validator\File\Exists',
      'options' => array(
        '/directory/[different_number].jpeg',
      )
    )
  )
));
$form->setInputFilter($filter);
我在互联网上搜索了解决同样问题的人,但找不到任何解决办法。我猜选项数组有问题,但我不知道是什么。
谁知道如何解决这个问题呢?

首先,您正在创建带有错误签名选项的Exists验证器。它应该有一个目录键,值必须是一个目录,而不是图像的完整路径+文件名

例如:

'validators' => array(
    array(
      'name' => 'Zend\Validator\File\Exists',
      'options' => array(
        'directory' => '/path/to/image/directory',
      )
    )
  )
第二个细节是,在调用表单/筛选器的
isValid()
方法之前,您需要为“photo”输入设置一个值,因为
存在
验证程序只知道查找目录,而不知道文件名

您可以尝试以下方法:

// ..
$filter->get('photo')->setValue('[different_number].jpeg');
$form->setInputFilter($filter);
希望能有帮助