Как запустить команду из пакета в контроллере приложений в Symfony3?

ВВЕДЕНИЕ

В моем личном проекте я использую:

  1. Symfony v3.2.7
  2. PHP v7.1.1
  3. CravlerMaxMindGeoIpBundle
  4. Как вызвать команду с контроллера
  5. В операционной системе Windows 10 Pro dev

TARGET

Я хотел бы запустить CravlerMaxMindGeoIpBundle's php bin/console cravler:maxmind:geoip-update от контроллера успешно.

ПРОБЛЕМА

На данный момент я установил пакет CravlerMaxMindGeoIpBundle и команду php bin/console cravler:maxmind:geoip-update прекрасно работает в командной строке.

Затем я выполнил официальную документацию (4-я ссылка в разделе «Вступление»). Разумеется, команда с изменяемым вызовом. И все же я получаю сообщение об ошибке.

 [Symfony\Component\Console\Exception\CommandNotFoundException] There are no commands defined in the "cravler:maxmind" namespace. 

ВОПРОС

Что делать, чтобы запустить команду без ошибок?

КОД

Мое действие в контроллере

 public function geoIpUpdateAction(Request $request) { $kernel = $this->get('kernel'); $application = new Application($kernel); $application->setAutoExit(false); $input = new ArrayInput(array( 'command' => 'cravler:maxmind:geoip-update' )); // You can use NullOutput() if you don't need the output $output = new BufferedOutput(); $application->run($input, $output); // return the output, don't use if you used NullOutput() $content = $output->fetch(); // return new Response(""), if you used NullOutput() dump($content); return $this->render('admin/geo_ip.html.twig'); } 

Мой AppKernel с включенными пакетами

 <?php use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; class AppKernel extends Kernel { public function registerBundles() { $bundles = [ new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), new Symfony\Bundle\SecurityBundle\SecurityBundle(), new Symfony\Bundle\TwigBundle\TwigBundle(), new Symfony\Bundle\MonologBundle\MonologBundle(), new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new AppBundle\AppBundle(), new Bmatzner\FoundationBundle\BmatznerFoundationBundle(), new Knp\Bundle\TimeBundle\KnpTimeBundle(), new FOS\UserBundle\FOSUserBundle(), new Cravler\MaxMindGeoIpBundle\CravlerMaxMindGeoIpBundle(), ]; if (in_array($this->getEnvironment(), ['dev', 'test'], true)) { $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); } return $bundles; } public function getRootDir() { return __DIR__; } public function getCacheDir() { return dirname(__DIR__).'/var/cache/'.$this->getEnvironment(); } public function getLogDir() { return dirname(__DIR__).'/var/logs'; } public function registerContainerConfiguration(LoaderInterface $loader) { $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml'); } } 

В КОНЦЕ КОНЦОВ

Что мне не хватает?

Это типичная ошибка для импорта:

 use Symfony\Component\Console\Application; 

вместо:

 use Symfony\Bundle\FrameworkBundle\Console\Application; 

Поэтому обязательно импортируйте второй класс (из FrameworkBundle), чтобы правильно загрузить все настроенные команды (внешние или нет).