2016-07-13 159 views
1

類似的問題已經在這裏幾次了,但不幸的是,我無法找到在那裏需要的幫助。沒有擴展能夠加載「my_namespace」的配置

我想在Symfony(3.1)中創建一個自定義擴展類。我下面的食譜[12]但無論我怎麼努力,我得到的錯誤在YamlFileLoader.php線404

InvalidArgumentException:沒有擴展能夠加載配置「czechnology_tools」(以[path_to_project] \ SRC \ Czechnology \ ToolsBundle \ DependencyInjection /../資源/配置\ holidays.yml)。看着命名空間 「czechnology_tools」,結果一無所獲

CzechnologyToolsExtension

<?php 

namespace Czechnology\ToolsBundle\DependencyInjection; 

// use ... 

class CzechnologyToolsExtension 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('holidays.yml'); 
    } 
} 

,並在同一目錄下相應的Configuration.php

<?php 

namespace Czechnology\ToolsBundle\DependencyInjection; 

// use ... 

class Configuration implements ConfigurationInterface 
{ 
    public function getConfigTreeBuilder() 
    { 
     $treeBuilder = new TreeBuilder(); 
     $rootNode = $treeBuilder->root('czechnology_tools'); 

     $rootNode 
      ->children() 
       ->scalarNode('calendar')->defaultValue('default')->end() 
      ->end() 
     ; 

     return $treeBuilder; 
    } 
} 

在YAML文件,我現在只是有虛擬內容,試圖讓它工作。 holidays.yml

czechnology_tools: 
    calendar: foo 

如果我嘗試在控制檯中進行調試,我得到這個:

$ bin/console config:dump-reference czechnology_tools 
# Default configuration for extension with alias: "czechnology_tools" 
czechnology_tools: 
    calendar:    default 

所以這似乎是擴展設置正確,用正確的別名。但是,我仍然無法克服這個例外。任何提示?

+0

是您在AppKernel中啓用的包。 ? ... – Drmjo

+0

@Dmm是的,該軟件包在Kernel中註冊,並且其中的所有服務都正常工作。 – Czechnology

+0

您可以嘗試找出配置名稱。我遇到過很多次了,大部分時間symfony都期待着一個不同的名字。嘗試在app/config.yml中設置配置'czechnology_tools'。暫時加載'holidays.yml'的行註釋。現在你會得到類似''查找命名空間「czechnology_tools」的錯誤,找到<註冊命名空間列表>'。在註冊的命名空間中查找您的配置名稱。 – Broncha

回答

0

我的猜測是,某個地方是你的包體系結構,有一個錯字(可能是故意的,一個包名與擴展名不同,......)。

首先,運行bin/console debug:config,爲了看看你的包會出現一個不同的別名你試圖使用一個,你應該有一個包含一條線,看起來像一個輸出:

CzechnologyToolsBundle | [好別名】

如果它不會出現在所有的,以下內容添加到您的包類:

namespace Czechnology\ToolsBundle; 

use Czechnology\ToolsBundle\DependencyInjection\CzechnologyToolsExtension; 

class CzechnologyToolsBundle extends Bundle 
{ 
    public function getContainerExtension() 
    { 
     return new CzechnologyToolsExtension(); 
    } 
} 

另外,將以下方法添加到您的包擴展名:

/** 
* {@inheritdoc} 
*/ 
public function getAlias() 
{ 
    return 'czechnology_tools'; 
} 

希望它解決了這個問題。

+0

初始化wayy高謝謝你的提示。控制檯命令的輸出與我在上面註釋中發佈的輸出相同,是的,我的包的別名在那裏。我也嘗試過'getAlias()'方法,沒有任何幫助。我也嘗試在那裏添加'getContainerExtension()'方法,但仍然得到相同的錯誤。 – Czechnology

相關問題