In my personal project I am using:
I would like to run CravlerMaxMindGeoIpBundle's
command php bin/console cravler:maxmind:geoip-update
from controller successfully.
At the moment I have set up CravlerMaxMindGeoIpBundle
bundle and command php bin/console cravler:maxmind:geoip-update
works fine in command line.
Then I followed official documentation (4th link in intro section). Changed callable command of course. And yet I get an error.
[Symfony\Component\Console\Exception\CommandNotFoundException]
There are no commands defined in the "cravler:maxmind" namespace.
What should I do to run the command without an error?
My action in controller
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');
}
My AppKernel with enabled bundles
<?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');
}
}
What am I missing?
It is a common mistake to import:
use Symfony\Component\Console\Application;
instead of:
use Symfony\Bundle\FrameworkBundle\Console\Application;
So make sure to import the second class (from FrameworkBundle) to load all configured commands (external or not) correctly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With