我正在尝试通过描述的方法扩展akeneo/MeasureBundle。我在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
时,这些表单类型不会显示为服务。尝试使用其中任何一个创建表单会导致“无法加载类型...”错误。我通过new
直接实例化它们来测试表单类型,并且运行正常。
答案 0 :(得分:1)
事实证明扩展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()
,但事实并非如此。但希望这有助于某人。