2014-10-02 75 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 } 

这就像验证.yml不存在。形式 - > isValid()的返回true

$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

你'缓存:清除'? – 2014-10-02 12:45:06

+0

因此,isValid在发布时总是如此。在DeclarationType中没有做任何奇怪的事情? – Cerad 2014-10-02 12:45:18

+1

我没有缓存:清除 – mlwacosmos 2014-10-02 13:05:15

回答

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

用手调用验证器,我确定它调用了yaml。所以yaml不是问题。我相信因为我翻译了yaml中的错误消息。所以毫无疑问。我看到2种可能性:1. isValid不调用验证器服务或2.在表单上使用isValid时,它找不到要验证的类 – mlwacosmos 2014-10-03 08:34:55