Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不是';我的自定义Symfony验证器没有执行吗?_Php_Symfony_Symfony 4.2 - Fatal编程技术网

Php 为什么不是';我的自定义Symfony验证器没有执行吗?

Php 为什么不是';我的自定义Symfony验证器没有执行吗?,php,symfony,symfony-4.2,Php,Symfony,Symfony 4.2,我有以下课程 要验证的实体: <?php //CompanyName\DataBundle\Entity\Intern\Address.php namespace CompanyName\DataBundle\Entity\Intern; use CompanyName\DataBundle\Entity\Country; use Swagger\Annotations\Property; use Symfony\Component\Serializer\Annotation\Gro

我有以下课程

要验证的实体:

<?php
//CompanyName\DataBundle\Entity\Intern\Address.php

namespace CompanyName\DataBundle\Entity\Intern;

use CompanyName\DataBundle\Entity\Country;

use Swagger\Annotations\Property;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;
use CompanyName\ConstraintValidatorBundle\ConstraintValidator;
use CompanyName\ConstraintValidatorBundle\Entity\CountryZipCodeAwareInterface;

/**
 * Class Address
 * @package CompanyName\DataBundle\Entity\Intern
 * @ConstraintValidator\ZipCode
 */
class Address implements CountryZipCodeAwareInterface
{
    /**
     * originId for 'API' send to the Addressbridge and stored in the Addresservice
     *
     * 
     * 
     */
    const ORIGIN_ID_FOR_ADDRESS_FROM_API = 2;

    /**
     * @var integer
     */
    private $id;

    /**
     * @var Name
     * @Property(type="string")
     * @Groups({"createOrder", "shoppingCart"})
     * @Assert\NotBlank()
     * @Assert\Valid()
     */
    private $name;

    /**
     * @var string
     * @Groups({"createOrder", "shoppingCart"})
     * @Assert\NotBlank()
     * @Assert\Type("string")
     * @Assert\Length(max = 100, maxMessage = "Street name cannot be longer than {{ limit }} characters")
     */
    private $street;

    /**
     * @var string
     * @Groups({"createOrder", "shoppingCart"})
     * @Assert\NotBlank()
     * @Assert\Type("string")
     * @Assert\Regex("/^\d+$/")
     * @Assert\Length(max = 5, maxMessage = "House number cannot be longer than {{ limit }} characters")
     */
    private $housenumber;

    /**
     * @var string
     * @Groups({"createOrder", "shoppingCart"})
     * @Assert\Type("string")
     * @Assert\Length(max = 25, maxMessage = "Addition cannot be longer than {{ limit }} characters")

    /**
     * @var Country
     * @Property(type="string")
     * @Groups({"createOrder", "shoppingCart"})
     * @Assert\NotBlank()
     * @Assert\Valid()
     */
    private $country;    
}

您必须使用自定义验证器断言
@Assert\Valid()
当您想要验证与您的实体相关的属性时(例如,当您有用户到地址的关系,并且您想要在用户实体的
$Address
上进行一些自定义验证时),应该使用注释


这就是它寻找类
test
进行验证的原因。查看文档

您使用了错误的验证器

首先将适当的命名空间导入到类定义中:

使用CompanyName\DataBundle\Validator作为公司服务器;
然后,您的属性批注应该如下所示:

/**
*@var Name
*@Property(type=“string”)
*@Groups({“createOrder”,“shoppingCart”})
*@Assert\NotBlank()
*@companyassert\Name
*/
私人$name;
这样,您实际上是在使用自定义验证器。删除
@Assert\Valid()

您还需要更新约束注释:

/**
*类名
*@package CompanyName\DataBundle\Validator
*@注释
*@Target({“属性”、“方法”、“注释”})
*/
类名扩展约束{
//你们班
}

(注意
@Target
注释)。另外,从这个类中删除
getTargets()
方法。

但是没有CompanyName\DataBundle\Validator类?我有以下错误<代码>类“CompanyName\DataBundle\Validator\NameValidator”未使用@Annotation进行注释。你确定该类可以用作注释吗?P.S.我第一次尝试使用Symfony。尝试从
CompanyAsserts\NameValidator
中删除“()”,但运气不佳
约束CompanyName\DataBundle\Validator\Name不能放在属性或getter上:(…我应该只使用
@CompanyAsserts\Name
?不,它不起作用。它只是抛出了
约束CompanyName\DataBundle\Validator\Name不能放在属性或getter上。
错误
<?php
//CompanyName\DataBundle\Validator\Name.php

namespace CompanyName\DataBundle\Validator;

use Symfony\Component\Validator\Constraint;

/**
 * Class Name
 * @package CompanyName\DataBundle\Validator
 * @Annotation
 */
class Name extends Constraint
{
    public $message = "No Valid Name provided";

    /**
     * {@inheritdoc}
     */
    public function getTargets()
    {
        die("gggggg");
        return self::CLASS_CONSTRAINT;
    }
}
<?php
//CompanyName\DataBundle\Validator\NameValidator.php

namespace CompanyName\DataBundle\Validator;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class NameValidator extends ConstraintValidator
{
    /**
     * Checks if the passed value is valid.
     *
     * @param Name name The value that should be validated
     * @param Constraint $constraint The constraint for the validation
     */
    public function validate($name, Constraint $constraint)
    {
        var_dump($name);
        die();

    }
}
 "invoiceAddress": {
    "name": "test",
    "street": "Dorpsstraat",
    "housenumber": "123",
    "zipcode": "1234AB",
    "city": "Dorp",
    "country": "nl"
  },
  "deliveryAddress": {
    "name": "Naam",
    "street": "Dorpsstraat",
    "housenumber": "123",
    "housenumberAddition": "A",
    "zipcode": "1234AB",
    "city": "Dorp",
    "country": "nl"
  },