Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.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 2中的自定义验证约束_Php_Validation_Symfony - Fatal编程技术网

Php 如何将参数传递到Symfony 2中的自定义验证约束

Php 如何将参数传递到Symfony 2中的自定义验证约束,php,validation,symfony,Php,Validation,Symfony,我正在处理一个验证约束,该约束检查url是否存在。我让它工作,但我想能够传递一个参数,说我的url实际上可以是空的,这将是好的 我知道您可以在Symfony 2附带的一些验证中传递参数,例如: Becyk\PublicBundle\Entity\ProduitsInfo: properties: file: - Image: mimeTypes: "image/png" mimeTyp

我正在处理一个验证约束,该约束检查url是否存在。我让它工作,但我想能够传递一个参数,说我的url实际上可以是空的,这将是好的

我知道您可以在Symfony 2附带的一些验证中传递参数,例如:

Becyk\PublicBundle\Entity\ProduitsInfo:
    properties:
        file:
            - Image:
                mimeTypes: "image/png"
                mimeTypesMessage: "Que des images sous format le format png"
                minWidth: 175
                minWidthMessage: "175px de large précisément"
                maxWidth: 175
                maxWidthMessage: "175px de large précisément"
                minHeight: 165
                maxHeightMessage: "165px de haut précisément"
                maxHeight: 165
                maxHeightMessage: "165px de haut précisément"
因此,我想做一些类似的事情:

PublicBundle\Entity\Infos:
    properties:
        lien:
            - Url: ~
            - AdminBundle\Validator\Constraints\ContrainteUrlExist:
                canBeEmpty: true
        linkedin:
            - Url: ~
            - AdminBundle\Validator\Constraints\ContrainteUrlLinkedIn: ~
我的验证类如下所示:

<?php

namespace AdminBundle\Validator\Constraints;

use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 */
class ContrainteUrlExist extends Constraint
{
    public $message = 'Cette adresse ne fonctionne pas.';
}

containerlexist
中,必须定义公共属性,然后才能将它们用作参数

<?php

namespace AdminBundle\Validator\Constraints;

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

Class ContrainteUrlExistValidator extends ConstraintValidator
{
    public function validate($url, Constraint $constraint)
    {
        //
        /*if(empty($url)&&$canBeEmpty)
        {
            return;
        }*/

        //Valide l'url
        if(!filter_var($url, FILTER_VALIDATE_URL) === false)
        {
            //Trouve l'host
            $hostname=parse_url($url, PHP_URL_HOST);

            //Tente de trouver l'adresse IP de l'host
            if (gethostbyname($hostname) !== $hostname)
            {
                //Cherche les données de l'entête
                $headers=get_headers($url);

                //Tente de trouver une erreur 404
                if(!strpos($headers[0], '404'))
                {
                    return;
                }
            }
        }

        $this->context->buildViolation($constraint->message)
                    ->setParameter('%string%', $url)
                    ->addViolation();
    }
}