php - 如何在 Symfony 2 中将参数传递给自定义验证约束

标签 php validation symfony

我正在研究检查 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();
    }
}

最佳答案

ContrainteUrlExist您必须定义公共(public)属性,然后才能将它们用作参数。

关于php - 如何在 Symfony 2 中将参数传递给自定义验证约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225133/

相关文章:

php - $_FILES ['file' ] ['name' ] 在 codeigniter 中

php - 获取匿名函数的字符串表示

ios - xcode 验证错误 : The info. plist 文件缺少所需的 key :CFBundleVersion

php - 如何在 jquery/ajax 未排序列表上集成分页?

javascript - 无法自定义交互式 JavaScript 内容

c# - 输入类型日期的客户端验证不起作用

c# - 如果验证错误则停止回发

php - 如何使用 Symfony 控制台识别是否提供了没有值的选项?

php - 在 Symfony2 和 SonataAdmin 中翻译数字状态代码

doctrine-orm - 如何在 Doctrine2 中手动设置主键