我在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');
}
}
答案 0 :(得分:1)
确保您是importing the bundle's services.yml
。最简单的方法是config.yml
来自services.xml
。 import是一种更好,更先进的解决方案。
要查看扩展程序类的示例,请参阅我的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”提示。