2014-10-02 40 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