【问题标题】:Imported dependency injection configuration has no container导入的依赖注入配置没有容器
【发布时间】:2015-02-07 17:03:56
【问题描述】:

我在 Symfonys 依赖注入配置之一中访问 $container 对象时遇到问题。我只是使用di-component,而不是框架。有一个主配置文件位于我的项目的根目录中,并导入了一些基本配置以及一些参数:

<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

<imports>
    <import resource="consts.php"/>
    <import resource="src/Base/dependencies.xml"/>
</imports>

</container>

虽然可以导入第二个 xml 文件,但第一个文件失败并出现以下错误:

在...中的非对象上调用成员函数 setParameter( )

consts.php 文件只是一个两行:

<?php
$container->setParameter('dir.root', __DIR__);
$container->setParameter('dir.data', __DIR__.'/data');

根据documentation on setting external Parameters,一切都应该正常,还是我错过了什么?

提前感谢您的帮助!

编辑: 在加载 DI 容器的脚本中,我不小心手动导入了 consts.php。这导致了上述错误。反正去掉这个导入会导致 Symfonys FileLoaderLoadException,在找不到类的时候抛出,可以解析要导入的文件的类型。

致命错误:未捕获的异常 'Symfony\Component\Config\Exception\FileLoaderLoadException' 带有消息“无法加载资源“/Users/carsten/Workspace/PHP/black-tie/consts.php”。在 /Users/carsten/Workspace/PHP/black-tie/vendor/symfony/config/Symfony/Component/Config/Loader/Loader.php:73

我该如何解决这个问题?

【问题讨论】:

  • 您是否使用$container = new ContainerBuilder(); 初始化了容器?
  • 不,我没有。将配置导入现有配置时,DI 是否不会自行创建 ContainerBuilder?
  • 不,我不是指重新初始化配置文件中的容器。我在问你如何在导入配置文件之前初始化你的容器。像这样?:$container = new ContainerBuilder(); $loader = new PhpFileLoader($container, new FileLocator(__DIR__)); $loader-&gt;load('services.php'); ?
  • 和XML差不多:$container = new ContainerBuilder(); $loader = new XmlFileLoader($container, new FileLocator(ROOT)); $loader-&gt;load($xmlContainer);
  • 另外,看看 DelegatingLoader 以使用多个加载器。

标签: php symfony dependency-injection


【解决方案1】:

我可以猜到原因在于文件路径。您尝试使用

导入文件
<import resource="consts.php"/>

所以 FileLoader 在根目录中寻找它,但可能是位于 app/config 目录(或其他地方)的文件。检查路径!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    相关资源
    最近更新 更多