Is it possible to dynamically register bundles in Symfony2?

后端 未结 2 746
再見小時候
再見小時候 2020-12-13 21:35

I have a loader bundle (LoaderBundle) that should register other bundles in the same directory.

/Acme/LoaderBundle/...
/Acme/ToBeLoadedBundle1/.         


        
2条回答
  •  误落风尘
    2020-12-13 22:39

    Untested but you could try something like

    use Symfony\Component\HttpKernel\Kernel;
    use Symfony\Component\Config\Loader\LoaderInterface;
    use Symfony\Component\Finder\Finder;
    
    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = array(
                new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
                //... default bundles
            );
    
            if (in_array($this->getEnvironment(), array('dev', 'test'))) {
                $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
                // ... debug and development bundles
            }
    
            $searchPath = __DIR__.'/../src';
            $finder     = new Finder();
            $finder->files()
                   ->in($searchPath)
                   ->name('*Bundle.php');
    
            foreach ($finder as $file) {
                $path       = substr($file->getRealpath(), strlen($searchPath) + 1, -4);
                $parts      = explode('/', $path);
                $class      = array_pop($parts);
                $namespace  = implode('\\', $parts);
                $class      = $namespace.'\\'.$class;
                $bundles[]  = new $class();
            }
    
            return $bundles;
        }
    
        public function registerContainerConfiguration(LoaderInterface $loader)
        {
            $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
        }
    }
    

提交回复
热议问题