【问题标题】:Symfony3 extends AppKernelSymfony3 扩展了 AppKernel
【发布时间】:2018-07-30 18:34:14
【问题描述】:

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

我的问题是:

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

我想要完成的是:

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

我的尝试

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

还有其他建议吗?

【问题讨论】:

    标签: php symfony dependencies symfony-3.4


    【解决方案1】:

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

    • 有一个指定的类,其方法返回您总是希望包含的包,例如:

      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 时,您只需更新它,并且捆绑包将被注册。

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

    【讨论】:

    • 我还没有尝试过,但这听起来是一个不错的解决方案。我的实际目标是不在主 AppKernel 中添加任何内容。但是,如果没有其他方法可以解决这个问题,那么这也应该对我有用。谢谢!
    • 您也可以尝试将整个 Kernel 类放入您的包中,并在 app.php 中使用它,而不是在 app/AppKernel.php 中使用它。但最终你不得不为一个项目安装一个包,当你开始改变你的可安装内核以满足单个项目的需要时,它可能会变得混乱。最终,将只使用一种registerBundles() 方法,据我所知,没有办法绕过它。
    • 谢谢。我刚刚在上面添加了您的示例,它就像一个魅力。
    • 我应该在哪里存储 MyKernelExtension 类?
    • 任何你想要的地方。
    【解决方案2】:

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

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

    Creating your very own Composer Package

    Creating your first Composer/Packagist package

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      相关资源
      最近更新 更多