通过Controller Symfony2运行迁移脚本

时间:2016-01-14 09:28:24

标签: symfony

Symfony2项目中使用了2个数据库,并且有一个迁移脚本放置在位置

app/DoctrineMigrations/codes/Version20150914201128.php

此迁移不适用于默认数据库,而是用于第二个使用的数据库。

需要在用户选择上运行迁移脚本。在某些操作上,弹出窗口将打开,如果用户选择“是”,则只需要运行该迁移脚本。

在Symfony2中通过Controller或Service运行迁移脚本是否可行或正确?

2 个答案:

答案 0 :(得分:2)

看看这个例子。您可以从控制器操作轻松触发doctrine migrations命令。

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Console\Application;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
use Symfony\Component\HttpFoundation\Response;

class SpoolController extends Controller
{
    public function migrateAction($entity_manager = 'default')
    {
        $kernel = $this->get('kernel');
        $application = new Application($kernel);
        $application->setAutoExit(false);

        $input = new ArrayInput(array(
           'command' => 'doctrine:migrations:migrate',
           '--em' => $entity_manager,
        ));
        // You can use NullOutput() if you don't need the output
        $output = new BufferedOutput();
        $application->run($input, $output);

        // return the output, don't use if you used NullOutput()
        $content = $output->fetch();

        // return new Response(""), if you used NullOutput()
        return new Response($content);
    }
}

这个稍微改变的示例来自文档章节 How to trigger a Command from a Controller

答案 1 :(得分:1)

Process Component可以是一个解决方案:

await