在Symfony2中形成非空白的文件输入字段(Non blank file input field

2019-06-26 03:20发布

在我的学说实体,这是data_class我的形式我有这样定义的文件属性:

/**
     * Image.
     *
     * @Assert\NotBlank
     * @Assert\File
     * @Assert\Image(minWidth="138", minHeight="96")
     */
    protected $file;

此外,添加它能够与类型->add('file', 'file') ...

创建实体运行完美,但问题是,当我使用的形式来更新这个实体。 它要求对文件再次,因为它有@assert \ NotBlank。 因为我在这个表单等领域,我不想重新上传的每一次更新的图像。

当我删除@assert \ NotBlank,everithing工作正常,但我想这个文件字段是强制性的。

任何的想法?

Answer 1:

你有两个出路这种情况,都依赖于Callback验证:( Symfony的回调 )

无论是添加boolean名为isUpdate你的实体将不会被保留,并会告诉该操作试图验证。 这种方法是完全链路如上所述。

解决这个另一种方式是回拨验证直接添加到您的表格类型。 再次,一些isUpdate将需要标志,但表格类型内此时间(通过构造通过它):

if ( $this->isUpdate == false ){
    $builder->addValidator(new CallbackValidator(function(FormInterface $form){
        if ( $form['image_file']->getData() == NULL ){
            $form->addError(new FormError('You need to specify image file.'));                  
        }
    }));
}

也许有达到预期的验证simplier的方式,但我来到这两个几个月前。

希望这可以帮助...



Answer 2:

您还可以使用验证组为。 一个验证组(也许是默认的)将成为创建和第二的更新。



Answer 3:

我已经在类似的情况。 我尝试在数据库文件路径编辑现有记录。 当我编辑记录我必须上传新的文件,有什么不舒服的用户。 在我的解决方案我使用的文件哈希值和变量的文件名可变的tmp文件。 所有需要的操作我在行动编辑类制成。

在波纹管连接完整的示例动作类

https://github.com/marekz/php_examples/wiki/Symfony-how-to-edit-attachment-form



文章来源: Non blank file input field in Symfony2 form