依赖注入 - Symfony(没有扩展能够加载 "acme_api.question_manager" 的配置(在 ../Resources/config/services.yml 中)
Dependency Injection - Symfony (There is no extension able to load the config for "acme_api.question_manager" (in ../Resources/config/services.yml)
在 symfony2 中使用 DI 设置新服务时出现此错误
我正在使用 symfony2.3 并使用 fos-rest bundle 来创建 json API's
- 这是我的代码的样子
DependencyInjection/Configuration.php
<?php
namespace Acme\ApiBundle\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
{
/**
* {@inheritDoc}
*
* @return TreeBuilder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$treeBuilder->root('acmeapi');
// Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for
// more information on that topic.
return $treeBuilder;
}
}
DependencyInjection/AcmeApiExtension.php
<?php
namespace Acme\ApiBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Config\FileLocator;
class AcmeApiExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
//$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
//$loader->load('services.xml');
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
public function getAlias()
{
return 'acme_api';
}
}
还有我的Resources/config/services.yml
parameters:
# Overriding Security Bundle's Access Listener class to provide detailed
# error message
services:
acme_api.question_manager:
class: AcmeApiBundle\Manager\QuestionManager
arguments:
- @doctrine
- @validator
最后 app/confog/config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: @AcmeApiBundle/Resources/config/services.yml }
.......
此外,添加应用内核文件
<?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\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Acme\ApiBundle\AcmeApiBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new FOS\RestBundle\FOSRestBundle(),
);
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');
}
}
如果需要更多数据点,请告诉我,以便在这里提供帮助。
您正在混合 config.yml 和 services.yml。第一个包含捆绑配置,第二个包含服务和参数。
services.yml 已经在 class AcmeApiExtension
行 $loader->load('services.yml');
中加载,因此无需再次加载它:
- { resource: @AcmeApiBundle/Resources/config/services.yml }
.
(加载带有扩展的服务是最常见的捆绑方式)。有关更多信息,请查看:http://symfony.com/doc/current/book/service_container.html#importing-other-container-configuration-resources
services.yml 中也存在格式错误。正确一个:
parameters:
# Overriding Security Bundle's Access Listener class to provide detailed
# error message
services:
acme_api.question_manager:
class: AcmeApiBundle\Manager\QuestionManager
arguments:
- @doctrine
- @validator
(最后 5 行缩进)。这会导致 "No extension" 错误。
在 symfony2 中使用 DI 设置新服务时出现此错误 我正在使用 symfony2.3 并使用 fos-rest bundle 来创建 json API's
- 这是我的代码的样子
DependencyInjection/Configuration.php
<?php
namespace Acme\ApiBundle\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
{
/**
* {@inheritDoc}
*
* @return TreeBuilder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$treeBuilder->root('acmeapi');
// Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for
// more information on that topic.
return $treeBuilder;
}
}
DependencyInjection/AcmeApiExtension.php
<?php
namespace Acme\ApiBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\Config\FileLocator;
class AcmeApiExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
//$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
//$loader->load('services.xml');
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
public function getAlias()
{
return 'acme_api';
}
}
还有我的Resources/config/services.yml
parameters:
# Overriding Security Bundle's Access Listener class to provide detailed
# error message
services:
acme_api.question_manager:
class: AcmeApiBundle\Manager\QuestionManager
arguments:
- @doctrine
- @validator
最后 app/confog/config.yml
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: @AcmeApiBundle/Resources/config/services.yml }
.......
此外,添加应用内核文件
<?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\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new Acme\ApiBundle\AcmeApiBundle(),
new JMS\SerializerBundle\JMSSerializerBundle(),
new FOS\RestBundle\FOSRestBundle(),
);
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');
}
}
如果需要更多数据点,请告诉我,以便在这里提供帮助。
您正在混合 config.yml 和 services.yml。第一个包含捆绑配置,第二个包含服务和参数。
services.yml 已经在 class AcmeApiExtension
行 $loader->load('services.yml');
中加载,因此无需再次加载它:
- { resource: @AcmeApiBundle/Resources/config/services.yml }
.
(加载带有扩展的服务是最常见的捆绑方式)。有关更多信息,请查看:http://symfony.com/doc/current/book/service_container.html#importing-other-container-configuration-resources
services.yml 中也存在格式错误。正确一个:
parameters:
# Overriding Security Bundle's Access Listener class to provide detailed
# error message
services:
acme_api.question_manager:
class: AcmeApiBundle\Manager\QuestionManager
arguments:
- @doctrine
- @validator
(最后 5 行缩进)。这会导致 "No extension" 错误。