我想使用过滤器来检查照片是否已上传。实际上传不会在表单中发生,但会被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 数组有问题,但我不知道是什么。 谁知道如何解决这个问题?
答案 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);
希望它有所帮助。