Symfony2表单中的非空白文件输入字段

时间:2012-07-07 08:38:22

标签: forms validation symfony doctrine-orm entity

在我的Doctrine实体中,我的表单为data_class,我有一个像这样定义的文件属性:

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

另外,将其添加到包含->add('file', 'file') ...

的表单类型

创建实体是完美的,但问题是当我使用表单来更新此实体时。它再次请求文件,因为它有@Assert \ NotBlank。由于我有这种形式的其他字段,我不想在每次更新时重新上载图像。

当我删除@Assert \ NotBlank时,everithing工作正常,但我希望此文件字段是必需的。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

您有两种方法摆脱这种情况,并且都依赖于Callback验证器:(Symfony callback

将名为boolean的{​​{1}}添加到您将不会持久化的实体,并告诉验证者尝试了哪些操作。该方法在上面的链接中完整描述。

解决此问题的另一种方法是直接向Form类型添加Callback验证器。同样,需要一些isUpdate标志,但这次是在Form类型中(通过构造函数传递):

isUpdate

也许有更简单的方法来实现所需的验证,但我在几个月前就遇到了这些问题。

希望这会有所帮助......

答案 1 :(得分:7)

您也可以使用验证组。一个验证组(可能是默认组)将用于创建,第二个用于更新。

答案 2 :(得分:0)

我也遇到过类似情况。 我尝试编辑数据库中具有文件路径的现有记录。 当我编辑记录时,我必须上传新文件,这对用户来说是不舒服的。 在我的解决方案中,我将变量tmp文件用于文件哈希和变量文件名。 我在“动作”编辑类中进行的所有必需操作。

波纹管链接中的完整示例动作类

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