ump*_*sky 13 forms validation entity symfony doctrine-orm
在我的Doctrine实体中,data_class对于我的表单,我有一个像这样定义的文件属性:
/**
* Image.
*
* @Assert\NotBlank
* @Assert\File
* @Assert\Image(minWidth="138", minHeight="96")
*/
protected $file;
Run Code Online (Sandbox Code Playgroud)
另外,将其添加到表单类型中->add('file', 'file')...
创建实体是完美的,但问题是当我使用表单来更新这个实体时.它再次请求文件,因为它有@Assert\NotBlank.由于我在此表单中有其他字段,因此我不想在每次更新时重新上载映像.
当我删除@Assert\NotBlank时,everithing工作正常,但我希望这个文件字段是必需的.
任何的想法?
你有两种方法可以解决这种情况并且都依赖Callback验证器:( Symfony回调)
将booleannamed命名添加isUpdate到您将不会持久化的实体,并告诉验证器尝试了哪个操作.该方法在上面的链接中完整描述.
解决此问题的另一种方法是直接向Form类型添加Callback验证器.同样,isUpdate需要一些标志,但这次是在Form类型中(通过构造函数传递):
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.'));
}
}));
}
Run Code Online (Sandbox Code Playgroud)
也许有更简单的方法来实现所需的验证,但我在这两个月前就遇到了这个问题.
希望这可以帮助...