У меня есть команда, которая уже находится в производстве, и я подозреваю, что она не работает. Разработчика, который работал над этим, больше нет. Поэтому я прихожу сюда, чтобы найти помощь.
Есть 2 вещи, которых я не понимаю.
1- Имя команды находится внутри папки контроллера... ApiController, но оно расширяет ContainerAwareCommand, поэтому я думаю, что это нормально...
2- Команда не найдена, но может быть связана с первым пунктом.
Когда я пытаюсь: php bin/console app:commandTest
У меня есть его ошибка в консоли:
There are no commands defined in the "app" namespace.
class ApiController extends ContainerAwareCommand
{
protected function configure () {
$this->setName('app:commandTest');
$this->setDescription("Some desc");
$this->setHelp("Some help");
}
public function execute(InputInterface $input, OutputInterface $output)
{ // whatever }
}
Люди сказали мне, что этот код работал, когда над ним работал предыдущий разработчик... но я не понимаю, как на самом деле. Надеюсь, вы видите, как это сделать или как заставить это работать. Спасибо.
Обновлено: что я пытался добавить в свои services.yaml, но это не работает
services:
app.command.api_controller:
class: AppBundle\Controller\ApiController
arguments: ["%command.default_name%"]
tags: - { name: console.command }
config.yaml
imports:
- { resource: services.yml }
Но при этом возникает ошибка
The file "/var/www/unitimmo/UniTimmo/app/config/services.yml" does not contain valid YAML
Версия Симфони? Консольные команды Symfony — задокументировано здесь. Но важно, чтобы вы выбрали правильную версию в правом верхнем углу. Времена изменились. Наличие команды в каталоге контроллера (с использованием класса с префиксом контроллера) очень необычно.
@Cerad Symfony V4 thomas.drbg Я так не думаю, но не уверен. Я все-таки думал, что это автомат.
Опубликуйте строку пространства имен из вашей команды. Это на самом деле поможет сузить версию Symfony, в которой была написана команда. Я предполагаю, что это было не новое приложение, а скорее что-то, начавшееся с более ранней версии, а затем обновленное. Затем загляните в свой файл services.yaml и посмотрите, соответствует ли раздел по умолчанию symfony.com/doc/current/…. Если вы еще этого не сделали, очистите каталоги кеша.
пространство имен @Cerad AppBundle\Controller; На самом деле я думаю, что это Symfony 3.
Ага. AppBundle строго подразумевает проект Symfony 3. Возможно, у вас даже нет раздела по умолчанию, что, в свою очередь, означает, что автонастройка не включена, что, в свою очередь, означает, что ваша команда не будет автоматически помечена. Как предложил @thomas.drbg, вам, вероятно, потребуется вручную определить команду как службу и пометить ее.
@Cerad Я пытался добавить это в свой services.yaml... но ничего не меняется app.command.api_controller: class: AppBundle\Controller\ApiController arguments: ["%command.default_name%"] tags: - { name: console.command }
Рассмотрите возможность обновления вашего вопроса с определением вашего сервиса, так как комментарий не очень хорошо форматируется. Также включите любой раздел по умолчанию. Используйте «bin/console debug:container», чтобы определить, создается ли ваша служба. Может также включать любой конструктор, который есть у ApiController, поскольку внедрение имени команды по умолчанию очень необычно.
И если у вас есть каталог Command, подумайте о том, чтобы переместить туда файл и переименовать его в ApiCommand. В более старом коде все, что находится в каталоге Command, будет выбрано как команда.
@Cerad первое сообщение обновлено. К сожалению, у меня нет каталога команд ... если бы это был только я, я бы хотел снова правильно выполнить эту команду ...
Становимся ближе. Посмотрите внимательно здесь, чтобы понять, почему вы получаете сообщение об ошибке. Это легко исправить. Конечно, как только вы преодолеете эту ошибку, вы, вероятно, столкнетесь как минимум с еще одной ошибкой, связанной с использованием get для нулевого объекта. Печальная правда в том, что если эта команда раньше работала, значит, вы смотрите не на ту кодовую базу. Даже если вы получите эту команду для регистрации, у вас будет гораздо больше проблем.
Боже, я чувствую себя таким тупым прямо сейчас. На самом деле у меня была папка Site/Site... Так что я не был в хорошей папке, когда запускал команду... он не мог найти папку bin. Такой глупый :(
Вы можете быть удивлены тем, как часто люди смотрят на одну базу кода, работая с другой. Просто одна из тех вещей.




Существует ли служба, определенная для этого класса и помеченная
console.command? Кажется возможным согласно документ