2014-06-05 23 views
6

Bu kod Symfony 2.4.5 çalıştı ama Symfony 2.5 için çalışmıyor:Symfony 2.5'de doğrulama yaml dosyalarını bölme nasıl?

Bu Symfony'de 2.4.5 yılında ancak 2,5

<?php 

namespace HardCoreMore\HRAPIBundle\DependencyInjection; 

use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\Config\FileLocator; 
use Symfony\Component\HttpKernel\DependencyInjection\Extension; 
use Symfony\Component\DependencyInjection\Loader; 

/** 
* This is the class that loads and manages your bundle configuration 
* 
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html} 
*/ 
class HRAPIExtension extends Extension 
{ 
    /** 
    * {@inheritDoc} 
    */ 
    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'); 

     // load validation configuration 
     $yamlMappingFiles = $container->getParameter('validator.mapping.loader.yaml_files_loader.mapping_files'); 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/site_user.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/human_resource.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/tag.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/company.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/programming_language.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/technology.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/language.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/management.yml'; 
     $yamlMappingFiles[] = __DIR__.'/../Resources/config/validation/calendar_entry.yml'; 
     $container->setParameter('validator.mapping.loader.yaml_files_loader.mapping_files', $yamlMappingFiles); 
    } 
} 

Symfony'de çalışıyordu benim HRAPI Uzatma sınıftır O hata görüntüler:

ParameterNotFoundException: You have requested a non-existent parameter "validator.mapping.loader.yaml_files_loader.mapping_files".

Herhangi bir fikir Symfony 2.5 için nasıl yapılır?

+0

"Çalışmıyor" konusunu açıklayabilir misiniz? – Maerlyn

+0

Soruyu güncelledik. 'ParameterNotFoundException: Var olmayan bir parametre talep ettiniz' validator.mapping.loader.yaml_files_loader.mapping_files '. –

cevap

17

Symfony'nin 2.5 doğrulama dosyaları yüklendi şeklini değiştirdi. İşte (dinamik olarak yüklemek için Bulucu bileşenini kullanarak) artık bunu nasıl geçerli: Sonra

namespace MyBundle\DependencyInjection\Compiler; 

use Symfony\Component\Finder\Finder; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; 
use Symfony\Component\Config\Resource\DirectoryResource; 

class ValidatorPass implements CompilerPassInterface 
{ 
    public function process(ContainerBuilder $container) 
    { 
     $validatorBuilder = $container->getDefinition('validator.builder'); 
     $validatorFiles = array(); 
     $finder = new Finder(); 

     foreach ($finder->files()->in(__DIR__ . '/../../Resources/config/validation') as $file) { 
      $validatorFiles[] = $file->getRealPath(); 
     } 

     $validatorBuilder->addMethodCall('addYamlMappings', array($validatorFiles)); 

     // add resources to the container to refresh cache after updating a file 
     $container->addResource(new DirectoryResource(__DIR__ . '/../../Resources/config/validation')); 
    } 
} 

sizin Bundle bu derleyici geçiş ekleyin::

bir derleyici geçiş oluşturun

namespace MyBundle; 

use Symfony\Component\HttpKernel\Bundle\Bundle; 
use Symfony\Component\DependencyInjection\ContainerBuilder; 
use MyBundle\DependencyInjection\Compiler\ValidatorPass; 

class MyBundle extends Bundle 
{ 
    // . . . . 

    public function build(ContainerBuilder $container) 
    { 
     parent::build($container); 

     $container->addCompilerPass(new ValidatorPass()); 
    } 

    // . . . .  
} 
+0

Çok teşekkürler dostum. Bu mükemmel çalışıyor. Şerefe :) –

+0

Fantastik Cevap! – Adam

2

Sen ValidatorBuilder#addYamlMappings/ValidatorBuilder#addYamlMapping kullanmalıdır:

$builderDefinition = $container->getDefinition('validator.builder'); 
$builderDefinition->addMethodCall('addYamlMappings', array(
    array(
     __DIR__.'/../Resources/config/validation/site_user.yml'; 
     __DIR__.'/../Resources/config/validation/human_resource.yml'; 
     __DIR__.'/../Resources/config/validation/tag.yml'; 
     __DIR__.'/../Resources/config/validation/company.yml'; 
     __DIR__.'/../Resources/config/validation/programming_language.yml'; 
     __DIR__.'/../Resources/config/validation/technology.yml'; 
     __DIR__.'/../Resources/config/validation/language.yml'; 
     __DIR__.'/../Resources/config/validation/management.yml'; 
     __DIR__.'/../Resources/config/validation/calendar_entry.yml' 
    ) 
)); 
+1

Denedim ama diyor ki: "InvalidArgumentException:" validator.builder "hizmet tanımı yok." –

+0

@CaslavSabani, * FrameworkBundle'dan sonra kayıtlı paketiniz *? Aksi takdirde, bir derleyici geçişi –

+0

kullanmayı deneyin. "FrameworkBundle'dan sonra kayıtlı paketim nedir?" Derken ne demek istiyorsunuz? Paketimi AppKernel'e kaydettim. –