2016-03-17 3 views
2

Я пытаюсь загрузить пользовательские конфигурации, но получаю исключение:Там нет расширения в состоянии загрузить конфигурацию

1/2 InvalidArgumentException в YamlFileLoader.php

Там нет расширения в состоянии загрузить конфигурация для "cwiczenia" (в .. \ приложение/Config \ config.yml) .Looked для пространства имен "cwiczenia", найдено "рамочным", "безопасности", ...

2/2 FileLoaderLoadException

Там нет расширения в состоянии загрузить конфигурацию "cwiczenia" ...

.. \ SRC \ CwiczeniaDependencyInjectionBundle \ внедрение зависимости \ configuration.php

namespace CwiczeniaDependencyInjectionBundle\DependencyInjection; 

use Symfony\Component\Config\Definition\ConfigurationInterface; 
use Symfony\Component\Config\Definition\Builder\TreeBuilder; 

class Configuration implements ConfigurationInterface{ 

public function getConfigTreeBuilder() 
{ 
    $treeBuilder = new TreeBuilder(); 
    $rootNode = $treeBuilder->root('cwiczenia'); 

    $rootNode 
     ->children() 
      ->scalarNode('teamName')->end() 
     ->end(); 

    return $treeBuilder; 

.. \ ЦСИ \ CwiczeniaDependencyInjectionBundle \ внедрение зависимости \ CwiczeniaExtension.php

namespace CwiczeniaDependencyInjectionBundle\DependencyInjection; 

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

class CwiczeniaExtension extends Extension 
{ 
    protected function load(array $configs, ContainerBuilder $container) 
    { 
     $configuration = $this->getConfiguration($configs, $container); 
     $config = $this->processConfiguration($configuration, $configs); 

     $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); 
     $loader->load('services.yml'); 
    } 
    public function getAlias() 
    { 
     return 'cwiczenia'; 
    } 

.. \ приложение \ Config \ config.yml

cwiczenia: 
    teamName: Lakers 

AppKernel

class AppKernel extends Kernel 
{ 
    public function registerBundles() 
    { 
     $bundles = array(
      new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
      new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
      new Symfony\Bundle\TwigBundle\TwigBundle(), 
      new Symfony\Bundle\MonologBundle\MonologBundle(), 
      new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
      new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), 
      new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
      new AppBundle\AppBundle(), 
      new SandersBundle\SandersBundle(), 
      new CwiczeniaDependencyInjectionBundle\CwiczeniaDependencyInjectionBundle(), 
     ); 

     if (in_array($this->getEnvironment(), array('dev', 'test'), true)) { 
      $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 
      $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
      $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
      $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
     } 

     return $bundles; 
    } 

    public function registerContainerConfiguration(LoaderInterface $loader) 
    { 
     $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); 
    } 
} 

же исключение, если удалить configuration.php

ответ

3

Вы должны вручную зарегистрировать класс расширения , как это описано здесь http://symfony.com/doc/current/cookbook/bundles/extension.html#manually-registering-an-extension-class

Что-то вроде этого:

//..... 
class CwiczeniaDependencyInjectionBundle extends Bundle 
{ 

    public function getContainerExtension() 
    { 
    if (null === $this->extension) { 
     $this->extension = new CwiczeniaExtension(); 
    } 
    return $this->extension; 
    } 
} 
0

У меня была такая же проблема, и устранить ее.

Чтобы зарегистрировать расширение, вы должны иметь то же имя для связки и расширения. Итак, если вы хотите включить расширение как cwiczenia, ваш файл расширения должен иметь имя CwiczeniaExtention, а пакет должен иметь имя CwiczeniaBundle.

Или, если вы не хотите изменить свое имя Bundle (CwiczeniaDependencyInjectionBundle), вы должны переименовать расширение на CwiczeniaDependencyInjectionExtension, а затем она будет доступна для загрузки конфигурации в cwiczenia_dependency_injection.

Или вы можете вручную зарегистрировать расширение, как было упомянуто выше, @helios

+0

Я считаю, что является гораздо лучшим ответом, как автоматическая регистрация намного лучше. Я выполняю все шаги, исправляю имя пакета, config, config root и пакеты должны загружаться автоматически, но в моем случае ни один из пакетов не загружается. Мне просто интересно, в чем проблема. Суть здесь включает все детали и ошибку, когда я запускаю behate https://gist.github.com/bizmate/82b4694d53ac23eac315a032bf41e6a5 – Bizmate

+0

@Bizmate Прежде всего, ваш конфиг.YML должно быть: '' 'YML my_reviews_reviews: Google: places_key: '% ENV (GOOGLE_PLACES_KEY)%' визг: ключ: '% ENV (YELP_FUSION_KEY)%' кэша: истекает: 604800 # 2 дней enabled: true '' ' http://symfony.com/doc/current/service_container/parameters.html#getting-and-setting-container-parameters-in-php> Используемый. нотация - это просто соглашение Symfony, упрощающее чтение параметров. Параметры - это просто плоские ключевые значения, они не могут быть организованы во вложенный массив. PS. К сожалению, уценка недоступна –

+0

Проблема заключалась в том, что я загружал специфическую конфигурацию пакета в сервисах service.yml, которые я загружал в классе Extension через загрузчик YAML. Я использовал flex, чтобы начать новый, и теперь я портировал все и, похоже, хорошо работает – Bizmate

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

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