1

我可能在理解 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 上这两个文件之间的区别。首先,您有控制台组件Application.php,它使用字符串作为其构造函数参数:

https://github.com/symfony/console/blob/master/Application.php

然后在 Symfony 框架中有相同的文件,该文件使用内核作为参数:

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",
4

1 回答 1

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 正常工作。

于 2017-07-24T00:50:04.027 回答