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
命令。
请查看这些链接,可能会有帮助。
我最近在做一个项目,在供应商内部构建自己的 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
命令。
请查看这些链接,可能会有帮助。