在inputfilter中使用file_exists

时间:2015-01-16 12:20:53

标签: filter zend-framework2 zend-form zend-filter

我想使用过滤器来检查照片是否已上传。实际上传不会在表单中发生,但会被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);

我在互联网上搜索了解决同样问题的人,但我找不到任何解决方案。我猜 options 数组有问题,但我不知道是什么。 谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

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

示例:

'validators' => array(
    array(
      'name' => 'Zend\Validator\File\Exists',
      'options' => array(
        'directory' => '/path/to/image/directory',
      )
    )
  )

第二个细节是你需要为你的照片设置一个值。在调用表单/过滤器的isValid()方法之前输入,因为Exists验证程序只知道查找目录,而不知道文件的名称。

您可以尝试这样的事情:

// ..
$filter->get('photo')->setValue('[different_number].jpeg');
$form->setInputFilter($filter);

希望它有所帮助。