2016-09-13 3 views
2

Я новичок в symfony, и сейчас я пытаюсь понять Symfony3. Хотя проверка с помощью аннотаций работает нормально, я не могу активировать проверку с помощью файла validation.yml.файл validation.yml игнорируется

В моем приложении/Config/config.yml, я изменил эту строку:

framework: 
    validation:  { enabled: true, enable_annotations: false } 

Моего ЦСИ/AppBundle/Ресурсы/конфигурация/validation.yml является:

# src/AppBundle/Resources/config/validation.yml 
AppBundle\Entity\TaskSetClass: 
    properties: 
     taskName: 
      - NotBlank: ~ 
     dueDate: 
      - NotBlank: ~ 
      - Type: \DateTime 

Я добавил расширение файла:

<?php 
// src/AppBundle/DependencyInjection/AppExtension.php 
namespace AppBundle\DependencyInjection; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\DependencyInjection\Loader; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\Finder\Finder; 
/* */ 
class AppExtension extends Extension 
    { 
    public function load(array $configs, ContainerBuilder $container) 
     { 
     $container=new ContainerBuilder(); 
     // Services 
     $loader=new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../../../app/config')); 
     $loader->load('services.yml'); 
     // Validation 
     // Commented : No "validator.mapping.loader.yaml_files_loader.mapping_files" parameter. 
     //$yamlMappingFiles=$container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); 
     $finder=new Finder(); 
     foreach($finder->files()->in(__DIR__.'/../../../app/Resources/config') as $file) 
      { 
      $filePath=$file->getRealPath(); 
      if(preg_match('@\[email protected]',$filePath)===1) 
       { 
       $yamlMappingFiles[]=$filePath; 
       } 
      } 
     $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles); 
     } 
    } 

дамп контейнера после setParameter() в appExtension.php показывает команда преуспела:

[parameterBag:protected] => Symfony\Component\DependencyInjection\ParameterBag\ParameterBag Object 
    (
    [parameters:protected] => Array 
     (
     [validator.mapping.loader.yaml_files_loader.mapping_files] => Array 
      (
      [0] => /mnt/400Go/www/sy1/app/Resources/config/validation.yml 
      ) 
     ) 
    [resolved:protected] => 
    ) 

В моей форме контроллера, если я перечисляю ограничения:

[...] 
if($form->isSubmitted()) 
    { 
    if($form->isValid()) 
     { 
     $metadata=$this->container 
       ->get('validator') 
       ->getMetadataFor('AppBundle\Entity\TaskSetClass'); 
     $propertiesMetadata=$metadata->properties; 
     $constraints=array(); 
     foreach ($propertiesMetadata as $propertyMetadata) 
      { 
      $constraints[$propertyMetadata->name]=$property->constraints; 
      } 
     echo'<pre>Constraints : '; 
     print_r($constraints); 
     echo'</pre>'; 
     die(); 
     [...] 

... массив пуст. поэтому файл, кажется, загружен, но ограничения игнорируются.

Неужели кто-нибудь столкнулся с этой ошибкой? Это может быть связано с различием между symfony 2 и 3.

ответ

0

[SOLVED] Файл проверки не был в правильном каталоге. Он должен был быть в AppBundle/Resources/config, и я использовал его в app/Resouces/config. Сейчас работает отлично.

+0

Это печально, поскольку в настоящее время это единственный файл конфигурации, который необходимо разместить внутри пакета. Довольно много непоследовательности –

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

  • Нет связанных вопросов^_^