使用附加服务扩展捆绑包
extending a bundle with additional services
我正在尝试延长 akeneo/MeasureBundle via the method described here。我已经向 MeasureManager 添加了几个方法,并添加了编译器传递以用我的 MeasureManager 版本替换原始版本。这一切都有效。
我还创建了一些自定义表单类型:UnitFamiliesType
、MeasurementType
、UnitType
。我希望这些成为服务,所以我将它们放入我的 services.yml 文件中,如下所示:
services:
acrdMeas.form.measurement.type:
class: ACRD\MeasureBundle\Form\Type\MeasurementType
scope: prototype
arguments: [ "@akeneo_measure.manager" ]
tags:
- { name: form.type, alias: acrdMeas_measurement }
acrdMeas.form.unitfamilies.type:
class: ACRD\MeasureBundle\Form\Type\UnitFamilyType
arguments: ["@akeneo_measure.manager"]
tags:
- { name: form.type, alias: acrdMeas_unitfamilies }
acrdMeas.form.units.type:
class: ACRD\MeasureBundle\Form\Type\UnitFamilyType
arguments: ["@akeneo_measure.manager"]
tags:
- { name: form.type, alias: acrdMeas_units }
不幸的是,当我 运行 app/console container:debug
时,这些表单类型没有显示为服务。尝试使用其中任何一个创建表单都会导致 "Could not load type ..." 错误。我确实通过 new
直接实例化它们来测试表单类型并且工作正常。
- 为什么我的扩展包没有处理 services.yml 文件?
- 如何向我的扩展包添加额外服务?
事实证明,扩展 BundleExtension 文件是可行的:
namespace ACRD\MeasureBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader;
use Akeneo\Bundle\MeasureBundle\DependencyInjection\AkeneoMeasureExtension as Extension;
class ACRDMeasureExtension extends Extension {
public function load(array $configs, ContainerBuilder $container){
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
我不是很清楚为什么子 load()
方法不会破坏 parent::load()
,但它不会。但希望这对某人有所帮助。
我正在尝试延长 akeneo/MeasureBundle via the method described here。我已经向 MeasureManager 添加了几个方法,并添加了编译器传递以用我的 MeasureManager 版本替换原始版本。这一切都有效。
我还创建了一些自定义表单类型:UnitFamiliesType
、MeasurementType
、UnitType
。我希望这些成为服务,所以我将它们放入我的 services.yml 文件中,如下所示:
services:
acrdMeas.form.measurement.type:
class: ACRD\MeasureBundle\Form\Type\MeasurementType
scope: prototype
arguments: [ "@akeneo_measure.manager" ]
tags:
- { name: form.type, alias: acrdMeas_measurement }
acrdMeas.form.unitfamilies.type:
class: ACRD\MeasureBundle\Form\Type\UnitFamilyType
arguments: ["@akeneo_measure.manager"]
tags:
- { name: form.type, alias: acrdMeas_unitfamilies }
acrdMeas.form.units.type:
class: ACRD\MeasureBundle\Form\Type\UnitFamilyType
arguments: ["@akeneo_measure.manager"]
tags:
- { name: form.type, alias: acrdMeas_units }
不幸的是,当我 运行 app/console container:debug
时,这些表单类型没有显示为服务。尝试使用其中任何一个创建表单都会导致 "Could not load type ..." 错误。我确实通过 new
直接实例化它们来测试表单类型并且工作正常。
- 为什么我的扩展包没有处理 services.yml 文件?
- 如何向我的扩展包添加额外服务?
事实证明,扩展 BundleExtension 文件是可行的:
namespace ACRD\MeasureBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader;
use Akeneo\Bundle\MeasureBundle\DependencyInjection\AkeneoMeasureExtension as Extension;
class ACRDMeasureExtension extends Extension {
public function load(array $configs, ContainerBuilder $container){
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}
我不是很清楚为什么子 load()
方法不会破坏 parent::load()
,但它不会。但希望这对某人有所帮助。