Php 如何在基于Symfony控制台组件的应用程序中加载捆绑包?
我可能在理解Symfony控制台组件时遇到了一些基本问题。我正在尝试编写一个基于控制台的应用程序,我想将Doctrine捆绑包添加到其中以创建基于ORM的实体,但是,我无法将捆绑包加载到我的应用程序中 我发现我应该创建Php 如何在基于Symfony控制台组件的应用程序中加载捆绑包?,php,symfony,doctrine-orm,composer-php,symfony-3.3,Php,Symfony,Doctrine Orm,Composer Php,Symfony 3.3,我可能在理解Symfony控制台组件时遇到了一些基本问题。我正在尝试编写一个基于控制台的应用程序,我想将Doctrine捆绑包添加到其中以创建基于ORM的实体,但是,我无法将捆绑包加载到我的应用程序中 我发现我应该创建app/AppKernel.php并在那里添加捆绑包: public function registerBundles() { $bundles = array( new Doctrine\Bundle\DoctrineBundle\DoctrineBund
app/AppKernel.php
并在那里添加捆绑包:
public function registerBundles()
{
$bundles = array(
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
);
return $bundles;
}
然后,我还将AppKernel添加到composer.json并转储了composer的自动加载文件:
"classmap": [ "app/AppKernel.php" ]
但是,我仍然无法在控制台应用程序的入口点中看到任何条令命令。我甚至不认为内核加载正确,最让我困惑的是Github上这两个文件之间的差异。首先是控制台组件的Application.php
,它使用字符串作为构造函数参数:
然后在Symfony框架中有一个相同的文件,它使用内核作为参数:
那么我是不是完全走错了路?如何在控制台组件应用程序中加载捆绑包/内核?或者我需要完整的Symfony软件包来做这种事情?如果我只需要编写一个有点复杂的终端应用程序,那似乎有点过分了
为了以防万一,以下是mycomposer.json中的相关包:
"symfony/console": "v3.3.*",
"symfony/yaml": "v3.3.*",
"doctrine/orm": "~2.5",
"doctrine/doctrine-bundle": "~1.6",
"doctrine/doctrine-cache-bundle": "~1.2",
如果您创建一个控制台命令来扩展ContainerWareCommand,如下所述:
然后你可以打电话:
$em = $this->container->get('doctrine.orm.entity_manager');
它为您提供了EntityManager,允许您在命令行应用程序中使用条令。无需编辑您的AppKernel或composer文件即可使其正常工作。嘿,谢谢您的回复。这是否意味着我必须手动执行命令,如php-bin/console-doctor:database:create
?不,默认情况下,命令doctor:database:create
。只需键入php-bin/console
,您就会看到所有可用命令的列表。顺便问一下,这个答案对您完全有效吗?如果是这样,请单击答案旁边的复选标记以表明它是正确的答案。不,就是这样,我无法运行该命令,因为我只有控制台组件,而没有完整的Symfony框架。我试图解决的问题是使条令命令可用,但这不起作用,因为捆绑包不能通过AppKernel连接到我的控制台二进制文件中。捆绑包是将这些命令与其他准备一起注册的,这就是为什么它们在我的应用程序中不可用的原因。肯定有办法只将捆绑包加载到控制台组件中吗?否则,当独立时,它似乎相当有限。@AlvinBunk可能想再次阅读该问题。他们特别不想使用Symfony框架。