【问题标题】:Symfony custom Constrait Validate for entity实体的 Symfony 自定义约束验证器
【发布时间】: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


    【解决方案1】:

    您的方法对类的属性有效。但是,如果您想验证整个类(而不是单个属性),则必须覆盖 ContainsInv 约束类中的 getTargets 方法。

    public function getTargets()
    {
        return self::CLASS_CONSTRAINT;
    }
    

    另见Class Constraint Validator

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2020-06-24
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多