Symfony3 扩展了 AppKernel

Symfony3 extends AppKernel

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

我的问题是:

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

我想要完成的是:

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

我试过的

我已经尝试设置 symfony-bundles/bundle-dependency 并且我已经关注了这个问题 Bundles and Dependencies 但似乎您之后仍然需要编辑主 AppKernel

还有其他建议吗?

我认为没有 out-of-the-box 解决方案可以自动将 Composer 安装的包添加到 AppKernel。但是如果你的包依赖总是由一个包指定,你可以尝试这样的事情:

  • 指定一个 class 方法,returns 将您始终想要包含的方法捆绑在一起,例如:

    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-installable 包中更改 MyKernelExtension 时,您只需更新它,捆绑包就会被注册。

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

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

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

Creating your very own Composer Package

Creating your first Composer/Packagist package