我可能在理解Symfony控制台组件时遇到了一些基本问题。我正在尝试编写一个基于控制台的应用程序,我想将Doctrine包添加到它来创建基于ORM的实体,但是,我无法将该包加载到我的应用程序中。
我发现我应该创建app/AppKernel.php
并在那里添加捆绑包:
public function registerBundles()
{
$bundles = array(
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
);
return $bundles;
}
然后我还将appKernel添加到composer.json并转储了composer的自动加载文件:
"classmap": [ "app/AppKernel.php" ]
但是,我仍然无法在控制台应用程序的入口点看到任何Doctrine命令。我甚至认为内核没有正确加载,对我来说最令人困惑的部分是Github上这两个文件之间的区别。首先,您拥有Console组件的Application.php
,它使用字符串作为其构造函数参数:
https://github.com/symfony/console/blob/master/Application.php
然后在Symfony Framework中有相同的文件,并且使用内核作为参数:
https://github.com/symfony/framework-bundle/blob/master/Console/Application.php
我在这里走错了路吗?如何在控制台组件应用程序中加载软件包/内核?或者我需要完整的Symfony包来做这种事情?如果我只是需要编写一个有点复杂的终端应用程序,这似乎有点矫枉过正。
如果有任何用途,这些是我composer.json
中的相关包:
"symfony/console": "v3.3.*",
"symfony/yaml": "v3.3.*",
"doctrine/orm": "~2.5",
"doctrine/doctrine-bundle": "~1.6",
"doctrine/doctrine-cache-bundle": "~1.2",
答案 0 :(得分:2)
如果您创建一个扩展ContainerAwareCommand的控制台命令,如下所述:
https://symfony.com/doc/current/console.html#getting-services-from-the-service-container
然后你可以打电话:
$em = $this->container->get('doctrine.orm.entity_manager');
它为您提供了EntityManager,允许您在命令行应用程序中使用Doctrine。无需编辑AppKernel或composer文件即可使Doctrine正常工作。