Symfony 2.8避免回调的双重错误

时间:2017-05-02 14:26:39

标签: php symfony doctrine symfony-2.8

在我的实体中,我有以下属性:

/**
 * @var string
 *
 * @ORM\Column(name="programm", type="string", length=255, nullable=true)
 * @Assert\File(
 *     maxSize = "1M",
 *     mimeTypes = {"application/pdf", "application/x-pdf", "image/png", "image/jpg", "image/jpeg"},
 *     mimeTypesMessage = "Es sind nur pdf, jpg und png Dateien erlaubt",
 *     groups={"new"}
 * )
 */
private $programm;

和回调

 /**
 * @Assert\Callback
 */
public function validateFields(ExecutionContextInterface $context) {
    if ('' == $this->programm && 2 == $this->programmextern) {
        $context->buildViolation('Bitte Datei hochladen')->atPath('programm')->addViolation();
    }

如果Assert \ File出错(文件太大,文件没有正确的mimeType等)我想跳过回调。有没有办法在我的实体中访问Assert \ File产生的错误,所以只有在没有错误的情况下我才能触发回调?

如果没有,有没有办法过滤错误,这样,如果有多个错误,只有在枝条模板中显示AssertFile错误?

1 个答案:

答案 0 :(得分:0)

然后,最简单的选项是实现您想要的是为回调添加不同的验证组:

/**
 * @Assert\Callback(
 *     groups={"trigger_after_new"}
 * )
 */
public function validateFields(ExecutionContextInterface $context) {
    if ('' == $this->programm && 2 == $this->programmextern) {
        $context->buildViolation('Bitte Datei hochladen')->atPath('programm')->addViolation();
}

然后读取How to Sequentially Apply Validation Groups仅在先前验证器组成功通过时才触发回调。