Symfony ContainerAwareCommand не найден с использованием Xdebug и PhpStorm - PullRequest
0 голосов
/ 09 марта 2019

Я использую PhpStorm с Symfony.Я пытаюсь отладить команду Symfony из среды IDE с помощью кнопки отладки ( Shift + F9 ).

Я получаю следующую ошибку.

Неустранимая ошибка PHP: класс 'Symfony \ Bundle \ FrameworkBundle \ Command \ ContainerAwareCommand' не найден в /home/user/Projects/project1/symfony/src/AppBundle/Command/testScriptCommand.php в строке 8 трассировки стека PHP:

Это странно, так как я следовал документации Symfony для создания команд, и я включил следующие классы:

<?
namespace AppBundle\Command;

use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class testScriptCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this->setName('app:test-script');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        echo 1;
    }
}

Отладчик работает в среде IDE до строки 8 и один разпопытка продолжения завершается неудачно с уже упомянутой фатальной ошибкой.

Мне кажется, что строка 4 на самом деле не импортирует необходимый ContainerAwareCommand.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Продлить Symfony\Component\Console\Command\Command

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

    /** @var ContainerInterface $container */
    protected $container;

    public function __construct(ContainerInterface $container)
    {
        parent::__construct();
        $this->container = $container;
    }

Тогда вы должны быть в состоянии звонить, например. $this->container->getParameter('project.parameter')

0 голосов
/ 09 марта 2019

За какой документацией вы следили?

Для создания команд вам нужно расширить Command, нет ContainerAwareCommand

// src/Command/CreateUserCommand.php
namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class CreateUserCommand extends Command
{
    // the name of the command (the part after "bin/console")
    protected static $defaultName = 'app:create-user';

    protected function configure()
    {
        // ...
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        // ...
    }
}

Для получения дополнительной информации: https://symfony.com/doc/current/console.html

EDIT:

Добавление информации ...

ContainerAwareCommand для версии Symfony <= 2.6 <a href="https://symfony.com/doc/2.6/cookbook/console/console_command.html" rel="nofollow noreferrer">https://symfony.com/doc/2.6/cookbook/console/console_command.html Тааак старый

...