我有一个带有 Doctrine 的 Symfony 项目。教义有一个命令
doctrine:schema:update
。
它被使用得太频繁了,可以说是出于习惯。运行 doctrine:schema:update
后,所有迁移都搞砸了,我必须来修复他们的开发机器。
我想禁用该命令(或者至少使其不是最简单的路线),但无法弄清楚如何(甚至如果)我可以做到这一点。
我已经尝试过:
UpdateSchemaCommand
,给它相同的命令并抛出异常services.yaml
中将其定义为public:false
services.yaml
中用一个不存在的类定义它(丑陋,但有效)。这一切都不执行任何操作,每次更新命令都会返回默认结果。
您可以使用事件监听器以这种方式禁用该命令:
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();
}
}
}