2014-10-02 2 views
1

Для проверки моего класса DeclarationForm:Symfony 2: validation.yml не имеет никакого эффекта

class DeclarationForm { 
    private $identifiant; 
    private $qualiteInterlocuteur; 
    private $nomCible; 
    private $reference; 
    private $description; 
    private $traitement; 
    private $commentaire; 
} 

Я использую validation.yml в комплекте:

xxx\MyBundle\Form\DeclarationForm: 
    properties: 
    nomCible: 
     - NotBlank: { message: 'not good' } 
    description: 
     - NotBlank: { message: 'not good' } 

Я проверил приложение/config.yml

framework: 
    validation:  { enabled: true } 

Это как validation.yml не существует. форма-> IsValid() возвращает истину

$declaration_form = new DeclarationForm(); 
$form = $this->createForm(new DeclarationType($this->get('translator'), array(
      'phase' => $phase, 
      'params_qualities' => $params 
     )), $declaration_form); 
$form->handleRequest($request); 
if($form->isValid()) { 
    .... 
} 

Я изменил код, чтобы не использовать IsValid:

$validator = $this->get('validator'); 
    $liste_erreurs = $validator->validate($declaration_form); 

    if(count($liste_erreurs) === 0) 

Он работает !!

Так что проблема есть (isValid). Я не понимаю, почему это не работает.

+0

Вы кеше: ясно? –

+0

Так isValid всегда правдиво, когда вы публикуете? Не делаете ничего странного в объявлении? – Cerad

+1

Я сделал кеш: ясно – mlwacosmos

ответ

0

Вы уверены, что запустили файл проверки. Чтобы использовать файл проверки yml, вам необходимо сопоставить их так, чтобы symfony знал, какой файл должен запускаться для проверки.

Вы можете сделать это в файле DependencyInjection/{$bundleName}Extension.php в вашу связку, как так:

class DemoExtension extends Extension 
{ 

    public function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = new Configuration(); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 

     // Validation 
     $yamlMappingFiles = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); 

     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/validationFile.yml'; 

     $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles); 
    } 
} 

Я strungling с той же проблемой для некоторых и это решило.

Надеюсь, это помогло.

+0

Вызов валидатора вручную, я на 200% уверен, что он вызывает yaml. Так что ямль не проблема. Я уверен, потому что я перевел сообщения об ошибках в yaml. Поэтому нет никаких сомнений. Я вижу две возможности: 1. isValid не вызывает службу валидатора или 2. при использовании isValid в форме он не находит класс для проверки – mlwacosmos

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