Symfony3扩展了AppKernel

时间:2018-02-20 11:43:15

标签: php symfony dependencies symfony-3.4

我最近正在开发一个项目,我在供应商内部构建自己的Bundle。这很好。我还设法添加了我的配置依赖项和其他bundle依赖项。

我的问题是:

如何使用我自己的内核扩展app/AppKernel内的内核。 我想使用的内核是在供应商内部(我创建的Bundle内部)。

我想要完成的是:

我的捆绑包与多个域“连接”(一个Symfony安装用于多个项目)。将来会有很多更新,我可能会添加新的Bundle依赖项。我不想一个一个地将它们添加到我的所有项目中。

我尝试了什么

我已尝试设置symfony-bundles/bundle-dependency并且我已按照此问题Bundles and Dependencies但似乎您仍需要在之后编辑主AppKernel

还有其他建议吗?

2 个答案:

答案 0 :(得分:4)

我认为没有一个开箱即用的解决方案可以自动将Composer安装的软件包添加到AppKernel。但是如果你的bundle依赖项总是由一个包指定,你可以尝试这样的东西:

  • 让一个指定的类具有返回您总想要包含的包的方法,例如:

    class MyKernelExtension
    {
        public static function getBundles()
        {
            return [
                new MyBundle(),
                new MyOtherBundle,
                // ...
            ];
        }
    }
    
  • AppKernel::registerBundles()

    中使用此方法
    class AppKernel extends Kernel
    {
        public function registerBundles()
        {
            $bundles = [
                new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
                // ...
            ];
    
            $bundles = array_merge($bundles, MyKernelExtension::getBundles());
    
            return $bundles;
        }
    }
    

您只需要向AppKernel添加一行,您就不必更改它。然后,每次在Composer可安装程序包中更改MyKernelExtension时,只需更新它,并且将注册这些包。

我不知道任何其他解决方案,但这个似乎很简单。

答案 1 :(得分:0)

据我所知,你没有正确地开始捆绑开发。将捆绑包复制到供应商文件夹是个坏主意。使用像Packagist或其他相关内容的本机依赖项是合适的。安装捆绑包的正确方法必须是composer req yourBundle之类的一个命令,并在前面描述的AppKernel::registerBundles()中添加一行。这样可以省去将更新传输到其他实例的麻烦,并且每个项目只有足够的composer update命令。

请查看这些链接,这可能会有所帮助。

Creating your very own Composer Package

Creating your first Composer/Packagist package