0

我在 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');
    }
}
4

3 回答 3

1

确保您正在导入捆绑包的services.yml. 最简单的方法是config.yml. 一个更好更高级的解决方案是编写一个扩展

要查看扩展类的示例,请参阅我的捆绑包中的. 如果您想使用 YAML,只需将和更改services.xml为.services.ymlXmlFileLoaderYamlFileLoader

于 2013-03-05T11:44:04.617 回答
1

扩展类是否正在解析您的 services.yml 文件?
默认情况下,在新包中,它设置为加载 xml 文件。你能粘贴你的

Acme\Bundle\YourBundle\DependencyInjection\AcmeYourExtension

班级?

于 2013-03-05T11:44:07.137 回答
0

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

于 2014-03-30T23:35:31.453 回答