在MyProject symfony项目目录结构之外(比它高一级)我使用一个简单的文件进行测试:
<?php
use Symfony\Component\VarDumper\VarDumper;
require __DIR__.'/MyProject/vendor/autoload.php';
require_once __DIR__.'/MyProject/app/AppKernel.php';
$kernel = new AppKernel('dev', false);
$kernel->loadClassCache();
echo '
__NAMESPACE__ = '.__NAMESPACE__;
echo '
__DIR__ = '.__DIR__;
$vd = new VarDumper();
dump($kernel->getContainer());
//prints "null"
我想加载一个包含其配置的容器 . 例如,我想测试我的数据库实体,访问存储库等 .
如何在这里加载和访问完全有用的 DI Container (就像它在控制器中可用)?这样做有简单的方法吗?
或者,也许更具体地说,当我想通过例如加载我的 config/config.yml 文件时:
$loader = new YamlFileLoader($container, new FileLocator(__DIR__));
$loader->load(__DIR__.'/MyProject/app/config/config.yml');
我之前需要通过容器加载所有bundle(在AppKernel中注册 - 在$ kernel内部var - registerBundles()方法) . 我怎样才能做到这一点?
UPDATE :所以现在它正在工作,甚至AppKernel的副本不再是必要的(所以我删除它) . 引导( $kernel->boot();
)内核后的问题是自动加载注释 . 我必须使用 Doctrine\Common\Annotations\AnnotationRegistry
手动注册它们:
AnnotationRegistry::registerAutoloadNamespace('Doctrine\ORM\Mapping' => __DIR__.'/MyProject/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping');