我最近正在开发一个项目,我在供应商内部构建自己的Bundle。这很好。我还设法添加了我的配置依赖项和其他bundle依赖项。
我的问题是:
如何使用我自己的内核扩展app/AppKernel
内的内核。
我想使用的内核是在供应商内部(我创建的Bundle内部)。
我想要完成的是:
我的捆绑包与多个域“连接”(一个Symfony安装用于多个项目)。将来会有很多更新,我可能会添加新的Bundle依赖项。我不想一个一个地将它们添加到我的所有项目中。
我尝试了什么
我已尝试设置symfony-bundles/bundle-dependency
并且我已按照此问题Bundles and Dependencies但似乎您仍需要在之后编辑主AppKernel
。
还有其他建议吗?
答案 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
命令。
请查看这些链接,这可能会有所帮助。