2015-07-04 2 views
1

Я работаю над ограничением проверки, проверяющим наличие URL-адреса. Я сделал это, но я хотел бы иметь возможность передавать параметры, которые говорят, что мой url может быть пустым, и это будет O.K.Как передать параметры в пользовательское ограничение проверки в Symfony 2

Я знаю, что вы можете передать параметры в какой-то проверке, которая поставляется с Symfony 2 для Exemple:

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

ответ

1

В ContrainteUrlExist вы должны определить общедоступные свойства, затем вы можете использовать их в качестве параметров.

Смежные вопросы