当前位置:  开发笔记 > 编程语言 > 正文

在Symfony app/console中启用Doctrine DBAL命令

如何解决《在Symfonyapp/console中启用DoctrineDBAL命令》经验,为你挑选了2个好方法。

当使用裸机Doctrine和开箱即用的命令行时,有两个命令可用,使用Doctrine和Symfony时似乎不可用,并且app/console:

dbal
  dbal:import    Import SQL file(s) directly to Database.
  dbal:run-sql   Executes arbitrary SQL directly from the command line.

有没有办法在Symfony中启用这些命令app/console



1> Luke..:

我找到了一个解决方法,因为你可以称之为,或者只是一种启用命令的方法.

通过添加一个Command您自己的bundle(或一个专用的bundle,由您决定),您可以简单地继承Doctrine命令.例如,要启用该dbal:import命令,请使用以下命令:

namespace Acme\Bundle\AcmeBundle\Command\Doctrine;

use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

use Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper;
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;

class ImportCommand extends \Doctrine\DBAL\Tools\Console\Command\ImportCommand {

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $container = $this->getApplication()->getKernel()->getContainer();

        $doctrine = $container->get('doctrine');

        $em = $doctrine->getEntityManager();
        $db = $em->getConnection();

        $helperSet = $this->getHelperSet();
        $helperSet->set( new ConnectionHelper( $db ), 'db' );
        $helperSet->set( new EntityManagerHelper( $em ), 'em' );

        parent::execute( $input, $output );
    }

}

如您所见,我们只是将原始命令子类化.由于数据库配置由Symfony管理,我们需要通过容器获取实体管理器.一旦我们更新,HelperSet我们将执行传递回父类.



2> 小智..:

将它cli-config.php放入项目的根目录中.这将启用--env参数php vendor/bin/doctrine.它受Symfony的app/console文件"启发".

请注意,这是针对Doctrine <= 2.3,请参阅较新版本的文档.

getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
$debug = getenv('SYMFONY_DEBUG') !== '0' && !$input->hasParameterOption(array('--no-debug', '')) && $env !== 'prod';

$kernel = new AppKernel($env, $debug);
$kernel->boot();

$em = $kernel->getContainer()->get('doctrine.orm.entity_manager');

$helperSet = new \Symfony\Component\Console\Helper\HelperSet(array(
    'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
    'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em)
));

return $helperSet;

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有