【发布时间】: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->load('services.php');? -
和XML差不多:
$container = new ContainerBuilder(); $loader = new XmlFileLoader($container, new FileLocator(ROOT)); $loader->load($xmlContainer); -
另外,看看 DelegatingLoader 以使用多个加载器。
标签: php symfony dependency-injection