symfony2 DI捆绑服务不可用

时间:2013-03-05 11:41:01

标签: symfony dependency-injection

我在Resources / config / services.yml中定义了一个服务:

services:
    gSm.gate.terminal:
        class: Stream\TerminalBundle\StreamTerminal
        arguments: [ [], [%terminal_login%, %terminal_password%] ]

我尝试在我的控制器操作中访问:

public function displayAction() {
    $terminal = $this->get('gSm.gate.terminal');
    return $this->render('StreamTerminalBundle::display.html.twig');
}

服务器返回以下异常:500 You have requested a non-existent service "gsm.gate.terminal"。捆绑包在appKernel中注册,捆绑包使用.yml配置文件...我不知道还有什么可以让这个服务可用...感谢您的帮助。

编辑:

我的扩展类代码是:

namespace Stream\TerminalBundle\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 StreamTerminalExtension 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');
    }
}

3 个答案:

答案 0 :(得分:1)

确保您是importing the bundle's services.yml。最简单的方法是config.yml来自services.xmlimport是一种更好,更先进的解决方案。

要查看扩展程序类的示例,请参阅我的write an extension。如果您想使用YAML,只需将services.yml更改为XmlFileLoader,将YamlFileLoader更改为{{1}}。

答案 1 :(得分:1)

您的services.yml文件是否由Extension类解析?
默认情况下,在新捆绑包中设置加载xml文件。 你能粘贴

吗?
Acme\Bundle\YourBundle\DependencyInjection\AcmeYourExtension

类?

答案 2 :(得分:0)

我不确定您是否可以在服务名称中使用大写字母。当您的服务是“gSm.gate.terminal”时,例外会提供“gsm.gate.terminal”提示。