我正在研究检查 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/