>

나만의 FacebookBundle을 만들고

이 오류가 발생했습니다 :

There is no extension able to load the configuration for "facebookbundle" (in /facebookx/app/config/config_dev.yml). Looked for namespace "facebookbundle", found "framework", "security", "twig", "monolog", "swiftmailer", "assetic", "doctrine", "sensio_framework_extra", "jms_aop", "jms_di_extra", "jms_security_extra", "d_facebook", "d_user", "d_security", "web_profiler", "sensio_distribution"

오류 메시지는 내 config.yml에 "facebookbundle"이라는 항목이 있는데 이는 확장명으로 사용되지 않습니까?

내 config.yml

facebookbundle:
    file:   %kernel.root_dir%/../src/FacebookBundle/Facebook/FacebookInit.php
    alias:  facebook
    app_id: xxx
    secret: xxx
    cookie: true
    permissions: [email, user_birthday, user_location, user_about_me]

내 DFacebookExtension

<?php
namespace D\FacebookBundle\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 DFacebookExtension 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');
        foreach (array('app_id', 'secret', 'cookie', 'permissions') as $attribute) {
            $container->setParameter('facebookbundle.'.$attribute, $config[$attribute]);
        }
        if (isset($config['file']) && $container->hasDefinition('acebookbundle.api')) {
            $facebookApi = $container->getDefinition('facebookbundle.api');
            $facebookApi->setFile($config['file']);
        }
    }
}

에러가 있었습니까?

  • 답변 # 1

    맞춤 설정 매개 변수를 승인하려면 번들 내의 Configuration.php 클래스를 사용하여 번들 구성을 정의해야합니다.

    src/FacebookBundle/DependencyInjection/Configuration.php :

    <?php
    namespace FacebookBundle\DependencyInjection;
    use Symfony\Component\Config\Definition\Builder\TreeBuilder;
    use Symfony\Component\Config\Definition\ConfigurationInterface;
    /**
     * This is the class that validates and merges configuration from your app/config files
     *
     * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html#cookbook-bundles-extension-config-class}
     */
    class Configuration implements ConfigurationInterface
    {
        public function getConfigTreeBuilder()
        {
            $treeBuilder = new TreeBuilder();
            $rootNode = $treeBuilder->root('facebookbundle');
            $rootNode
                ->children()
                    ->scalarNode('file')->defaultValue('')->end()
                    ->scalarNode('alias')->defaultValue('')->end()
                    ->scalarNode('app_id')->defaultValue('')->end()
                    ->scalarNode('secret')->defaultValue('')->end()
                    ->booleanNode('cookie')->defaultTrue()->end()
                    ->arrayNode('permissions')
                        ->canBeUnset()->prototype('scalar')->end()->end()
                ->end()
                ;
            return $treeBuilder;
        }
    }
    ?>
    
    

  • 답변 # 2

    또한구성 파일의 루트 키는 번들 이름의 정규화 된 형식이어야합니다.

    이것은 몇 번 격려해 왔으며, 모르는 경우 해결하는 것이 매우 실망 스럽습니다.

    예 : 번들이 MyFirstAwesomeBundle 인 경우 파일의 루트 키는 my_first_awesome 여야합니다. . 따라서 낙타 케이스는 뱀 케이스로 변환되며 "번들"이라는 단어는 무시되거나 제거됩니다.

    따라서 파일의 루트 키를 Configuration::getConfigTreeBuilder() 에 지정된 값과 정확히 일치시키는 것  충분하지 않습니다.

    이 규칙을 따르지 않으면 There is no extension able to load the configuration 를 얻게됩니다  오류.

    <시간>

    이 페이지로 끝나는 다음 절망적 인 영혼을 도울 수 있기를 바랍니다 ...

  • 답변 # 3

    app/AppKernel.php에서 번들을 시작하는 것을 잊었을 때 발생합니다 :

    <?php
    use Symfony\Component\HttpKernel\Kernel;
    use Symfony\Component\Config\Loader\LoaderInterface;
    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 Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
                  new Symfony\Bundle\AsseticBundle\AsseticBundle(),
                  new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
                  new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
                  //...
                  new D\FacebookBundle\DFacebookBundle(),
                  //...
          );
          if (in_array($this->getEnvironment(), array ('dev', 'test')))
          {
             $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(__DIR__ . '/config/config_' . $this->getEnvironment() . '.yml');
       }
    }
    
    

  • 답변 # 4

    이 오류는 services 가 없거나 잘못되어 발생할 수도 있습니다  설정의 루트에 키. 다음과 같이 보일 것입니다 :

    services:
        foo_bar.baz:
            class: Foo\BarBundle\Service\BazService
    
    

  • 이전 c# - 개인 생성자를 사용하여 내부 클래스 인스턴스화
  • 다음 CRAN에서 아카이브 된 패키지를 설치하려면 어떻게합니까?