禁用供应商的 Symfony 命令

问题描述 投票:0回答:1

我有一个带有 Doctrine 的 Symfony 项目。教义有一个命令

doctrine:schema:update
。 它被使用得太频繁了,可以说是出于习惯。运行
doctrine:schema:update
后,所有迁移都搞砸了,我必须来修复他们的开发机器。

我想禁用该命令(或者至少使其不是最简单的路线),但无法弄清楚如何(甚至如果)我可以做到这一点。

我已经尝试过:

  • 扩展
    UpdateSchemaCommand
    ,给它相同的命令并抛出异常
  • 在我的
    services.yaml
    中将其定义为
    public:false
  • 在我的
    services.yaml
    中用一个不存在的类定义它(丑陋,但有效)。

这一切都不执行任何操作,每次更新命令都会返回默认结果。

php symfony doctrine
1个回答
0
投票

您可以使用事件监听器以这种方式禁用该命令:

namespace App\EventListener;

use Symfony\Component\Console\Event\ConsoleCommandEvent;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class CommandListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            ConsoleEvents::COMMAND => 'onConsoleCommand',
        ];
    }

    public function onConsoleCommand(ConsoleCommandEvent $event)
    {
        $commandName = $event->getCommand()->getName();

        if ($commandName === 'doctrine:schema:update') {
            $event->getOutput()->writeln('<error>The command doctrine:schema:update is disabled.</error>');
            $event->disableCommand(); 
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.