【问题标题】:How to pass parameters to custom validation constraint in Symfony 2如何在 Symfony 2 中将参数传递给自定义验证约束
【发布时间】:2015-07-04 21:11:54
【问题描述】:

我正在研究一个检查 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.';
}

和:

<?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();
    }
}

【问题讨论】:

    标签: php validation symfony


    【解决方案1】:

    ContrainteUrlExist你必须定义公共属性,然后你可以使用它们作为参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多