Отключить команду Symfony от поставщика

У меня есть проект Symfony с Doctrine. В доктрине есть команда doctrine:schema:update. К нему слишком часто привыкают, скажем так, по привычке. После запуска doctrine:schema:update все миграции испорчены, и мне приходится приходить и чинить их машину разработки.

Я хочу отключить эту команду (или, по крайней мере, сделать ее не самым простым маршрутом), но не могу понять, как (или даже ЕСЛИ) я могу это сделать.

Я пробовал:

  • Расширьте UpdateSchemaCommand, дайте ему ту же КОМАНДУ и создайте исключение.
  • Определите это в моем services.yaml как public:false
  • Определите это в моем services.yaml с помощью несуществующего класса (некрасиво, но работает).

Все это ничего не дает, каждый раз команда обновления возвращает результат по умолчанию.

Хм. Пробовали ли вы просто удалить vendor/doctrine/doctrine-bundle/Command/Proxy/UpdateSchemaDo‌​ctrineCommand.php? А если серьезно, если команда разработчиков настаивает на использовании команд, которые им не положены, то у вас возникают более серьезные проблемы. Вы пытались объяснить, почему вы считаете команду плохой идеей? Или спрашиваете, почему им нравится его использовать? Миграции переоценены.

Cerad 12.08.2024 15:52

@Cerad Согласно вопросу, команда выполнена по ошибке и не реализована проектом. Кроме того, я не думаю, что разумно использовать менеджер пакетов, а затем вручную возиться с файлами, которые он создает, независимо от того, Composer или нет.

Álvaro González 12.08.2024 15:59

Вы пробовали использовать EventListener? Например, прослушивать консольные команды с помощью ConsoleCommandEvent, а затем отключать выполнение команды?

MoWiz 12.08.2024 16:02

По большей части это самый простой способ исправить БД разработки. Вот только нет, потому что это делается быстро, но требуется время, чтобы навести порядок. Это привычка, от которой, по мнению пользователей, следует избавиться. См. мое переопределение как напоминание :) Исключением будет что-то вроде «Нет, вместо этого используйте миграции»

Martijn 12.08.2024 16:02

Обратите внимание на разницу между UpdateSchemaDoctrineCommand и UpdateSchemaCommand.

Cerad 12.08.2024 17:17
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете отключить команду таким образом с помощью EventListener:

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)
    {
        if ($event->getCommand()->getName() === 'doctrine:schema:update') {
            $event->getOutput()->writeln('<error>The command doctrine:schema:update is disabled.</error>');
            $event->disableCommand(); 
        }
    }
}

А затем включите его:

services:
  App\EventListener\DisableDoctrineSchemaUpdateListener:
    tags: [{name: 'kernel.event_subscriber'}]

Требовалось добавление сервисов, но тогда всё заработало как положено :) А если кому-то очень надо, то включить легко, если знать как

Martijn 12.08.2024 16:54

Я согласен! Но когда кто-то хочет обойти ограничения, я думаю, всегда есть способ;) По крайней мере, это первый «мягкий» уровень для отключения команды.

MoWiz 12.08.2024 16:59

💡 <error>Command doctrine:schema:update is not supported in this project. Do blah blah instead.</error>

Álvaro González 13.08.2024 11:55

Другие вопросы по теме