【问题标题】:Symfony 2 removes factory services?Symfony 2 移除工厂服务?
【发布时间】:2012-12-14 16:58:54
【问题描述】:

Symfony 会自动删除工厂服务吗?

不知道发生了什么,但我的包正在正确加载service.xml 文件:

<services>
    <service id="gremo_subscription_factory"
        class="%gremo_subscription_factory.class%" public="false">
        <argument>%gremo_subscription.interval%</argument>
    </service>
    <service id="gremo_subscription" class="%gremo_subscription.class%"
        factory-service="gremo_subscription_factory"
        factory-method="getSubscription">
    </service>
</services>

这是由扩展类完成的:

public function load(array $configs, ContainerBuilder $container)
{
    $processor = new Processor();
    $configuration = new Configuration();

    $config = $processor->processConfiguration($configuration, $configs);
    $loader = new XmlFileLoader($container,
        new FileLocator(__DIR__.'/../Resources/config'));

    $loader->load('services.xml');
}

服务包中存在gremo_subscription_factory 的服务定义(var_dump 容器显示服务定义)。但是,当我尝试从另一个包访问 gremo_subscription 服务(例如,从控制器)时:

$subscription = $this->get('gremo_subscription');

我得到了例外:

您请求的服务不存在 “gremo_subscription_factory”。

为什么会这样?

【问题讨论】:

  • 你需要对服务的引用,所以你需要在@前面加上gremo_subscription_factory
  • @Squazic 不,不需要@。问题是 public=false...
  • 我的错,我通常使用 yaml 而不是 xml,所以认为这是问题所在。看来您没有遵循the docs 用于定义工厂服务的方法。尝试镜像。

标签: exception symfony dependency-injection symfony-2.1


【解决方案1】:

您不应将gremo_subscription_factory 设置为私有。

删除服务上的public="false" 标志。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多