【发布时间】:2016-07-09 14:59:08
【问题描述】:
在我的控制器上应用验证方法时出现此错误。
可捕获的致命错误:传递给 att\Bundle\Validator\Constraint\CertWfCheckValidator::validate() 的参数 2 必须是 Symfony\Component\Validator\Constraint 的实例,没有给出,在 /var/www/html/ 中调用att/src/att/Bundle/Controller/CertificateController.php 在第 451 行并定义了
这是我的服务定义:
att.validator.certificate.wkcheck:
class: att\Bundle\Validator\Constraint\CertWfCheckValidator
arguments: ["@doctrine.orm.entity_manager", "@service_container"]
tags:
- { name: validator.constraint_validator, alias: validator.certwkcheck }
约束类:
namespace att\Bundle\Validator\Constraint;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class CertWfCheck extends Constraint {
public $message = "El certificado tiene un Tramite asociado, no se puede eliminar";
public function validatedBy() {
return 'validator.certwkcheck';
}
public function getTargets() {
return [self::CLASS_CONSTRAINT];
}
}
验证器类:
namespace att\Bundle\Validator\Constraint;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class CertWfCheckValidator extends ConstraintValidator {
protected $em;
protected $container;
public function __construct(\Doctrine\ORM\EntityManager $em, \Symfony\Component\DependencyInjection\ContainerInterface $container) {
$this->em = $em;
$this->container = $container;
}
public function validate($value, Constraint $constraint) {
var_dump($value);
}
}
控制器
$certificate = $this->get('certificate.manager')
->getCertificateById(
$this->getRequest()->request->get('id')
);
$validator = $this->get('att.validator.certificate.wkcheck');
$errors = $validator->validate($certificate);
$errorsString = (string) $errors;
【问题讨论】:
标签: validation symfony dependency-injection constraints