【发布时间】:2018-01-09 11:21:31
【问题描述】:
我使用 symfony 2.8,我有一些实体,我需要通过一些条件验证这个实体
我创建约束ContainsInvValidator 并调用验证服务并验证实体,但调试时我没有输入ContainsInvValidator 如何更正使用自定义验证?
这是我的ContainsInvValidator
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;
class ContainsInvValidator extends ConstraintValidator
{
public function validate($entity, Constraint $constraint)
{
if (!$entity->getInvoiceNumber()) {
$this->context->buildViolation($constraint->message)
->atPath('foo')
->addViolation();
}
if (!$entity->getReference()) {
$this->context->buildViolation($constraint->message)
->atPath('foo')
->addViolation();
}
if (!$entity->getInvoiceDate()) {
$this->context->buildViolation($constraint->message)
->atPath('foo')
->addViolation();
}
}
}
和ContainsInv:
namespace AppBundle\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class ContainsInv extends Constraint
{
public $message = 'The string "{{ string }}" no valid.';
}
添加配置:
services:
app.contains_test_check_validator:
class: AppBundle\Validator\Constraints\ContainsInv
tags:
- { name: validator.constraint_validator }
以及我为其创建自定义验证器的实体类
/**
* InboundInvoice
* @ContainsInv(groups={"test_check"})
*/
class InboundInvoice
{
然后在我的行动中
public function handleInvoiceStatusAction(Request $request, InboundInvoice $invoice)
{
$resultHandling = $invoice->changedStatus();
$errors = $this->get('validator')->validate($invoice, [], ['test_check']);
在变量errors我有
Symfony\Component\Validator\ConstraintViolationList::__set_state(array(
'violations' =>
array (
),
))
【问题讨论】:
标签: php symfony validation doctrine-orm