我正在研究检查网址是否存在的验证约束。我使它工作,但我希望能够传递一个参数,说我的网址实际上是空的,它将是O.K。
我知道您可以在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();
}
}
答案 0 :(得分:1)
在ContrainteUrlExist
中,您必须定义公共属性,然后才能将它们用作参数。