在我的学说实体,这是data_class
我的形式我有这样定义的文件属性:
/**
* Image.
*
* @Assert\NotBlank
* @Assert\File
* @Assert\Image(minWidth="138", minHeight="96")
*/
protected $file;
此外,添加它能够与类型->add('file', 'file')
...
创建实体运行完美,但问题是,当我使用的形式来更新这个实体。 它要求对文件再次,因为它有@assert \ NotBlank。 因为我在这个表单等领域,我不想重新上传的每一次更新的图像。
当我删除@assert \ NotBlank,everithing工作正常,但我想这个文件字段是强制性的。
任何的想法?
你有两个出路这种情况,都依赖于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的方式,但我来到这两个几个月前。
希望这可以帮助...
您还可以使用验证组为。 一个验证组(也许是默认的)将成为创建和第二的更新。
我已经在类似的情况。 我尝试在数据库文件路径编辑现有记录。 当我编辑记录我必须上传新的文件,有什么不舒服的用户。 在我的解决方案我使用的文件哈希值和变量的文件名可变的tmp文件。 所有需要的操作我在行动编辑类制成。
在波纹管连接完整的示例动作类
https://github.com/marekz/php_examples/wiki/Symfony-how-to-edit-attachment-form