加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 是否有可能在Symfony2中动态注册bundle?

发布时间:2021-07-06 05:25:06 所属栏目:大数据 来源: https://www.jb51.cc
导读:我有一个加载程序包(LoaderBundle),它应该在同一目录中注册其他bundle. /Acme/LoaderBundle/.../Acme/ToBeLoadedBundle1/.../Acme/ToBeLoadedBundle2/... 我想避免在AppKernel :: registerBundles()中手动注册每个新包(在Acme目录中).我希望LoaderBundle能够

我有一个加载程序包(LoaderBundle),它应该在同一目录中注册其他bundle.

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

我想避免在AppKernel :: registerBundles()中手动注册每个新包(在Acme目录中).我希望LoaderBundle能够在每个请求上运行并动态注册ToBeLoadedBundle1和ToBeLoadedBundle2.可能吗?

解决方法:

未经测试但你可以尝试类似的东西

use SymfonyComponentHttpKernelKernel;
use SymfonyComponentConfigLoaderLoaderInterface;
use SymfonyComponentFinderFinder;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new SymfonyBundleFrameworkBundleFrameworkBundle(),
            //... default bundles
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new SymfonyBundleWebProfilerBundleWebProfilerBundle();
            // ... 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');
    }
}

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读