当使用裸机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
?
我找到了一个解决方法,因为你可以称之为,或者只是一种启用命令的方法.
通过添加一个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
我们将执行传递回父类.
将它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;