I could not find an EXTEND way for the existing command, so I decided to create a new console command in the existing package.
namespace Your\OriginalBundle\Command; use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; class AppendNewBundleCommand extends ContainerAwareCommand { protected $appKernel; protected function configure() { $this ->setName('yourbundle:appendnewbundle') ->setDescription('Append a new bundle to the AppKernel.php') ->addArgument('namespace', InputArgument::REQUIRED, 'Define your new bundle/namespace') ; $this->appKernel = __DIR__.'/../../../../app/AppKernel.php'; } protected function execute(InputInterface $input, OutputInterface $output) { if (!file_exists($this->appKernel)) { throw new \ErrorException(sprintf("Could not locate file %s",$this->appKernel)); } if (!is_writable($this->appKernel)) { throw new \ErrorException(sprintf('Cannot write into AppKernel (%s)',$this->appKernel)); } $namespace = $input->getArgument('namespace'); $appContent = file_get_contents($this->appKernel); $bundle = str_replace("/","\\",$namespace)."\\".str_replace("/","",$namespace); $newBundle = "new {$bundle}(),"; $pattern = '/\$bundles\s?=\s?array\((.*?)\);/is'; preg_match($pattern, $appContent,$matches); $bList = rtrim($matches[1],"\n "); $e = explode(",",$bList); $firstBundle = array_shift($e); $tabs = substr_count($firstBundle,' '); $newBList = "\$bundles = array(" .$bList."\n" .str_repeat(' ', $tabs).$newBundle."\n" .str_repeat(' ',$tabs-1).");"; file_put_contents($this->appKernel,preg_replace($pattern,$newBList,$appContent)); } }
Now you can execute it immediately after creating your package by doing
php app/console yourbundle:appendnewbundle Your/SecondBundle
This will add it to the list of existing packages.
new Your\SecondBundle\YourSecondBundle(),
This works if you have the standard (symfony2) AppKernel. Example:
<?php use Symfony\Component\HttpKernel\Kernel; use Symfony\Component\Config\Loader\LoaderInterface; class AppKernel extends Kernel { public function registerBundles() { $bundles = array( 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 Symfony\Bundle\DoctrineBundle\DoctrineBundle(), new Symfony\Bundle\AsseticBundle\AsseticBundle(), new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(), new Ornicar\ApcBundle\OrnicarApcBundle(), new Your\OriginalBundle\YourOriginalBundle(), ); if (in_array($this->getEnvironment(), array('dev', 'test'))) { $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); } return $bundles; } public function registerContainerConfiguration(LoaderInterface $loader) { $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml'); } }