通过附加服务扩展捆绑

时间:2015-10-14 15:03:07

标签: forms symfony bundle

我正在尝试通过Bicubic Spline interpolated complete描述的方法扩展akeneo/MeasureBundle。我在MeasureManager中添加了几个方法,并添加了一个编译器传递来替换我的原始版本的MeasureManager。一切正常。

我还创建了一些自定义表单类型:UnitFamiliesTypeMeasurementTypeUnitType。我希望这些是服务,所以我将它们放在我的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直接实例化它们来测试表单类型,并且运行正常。

  • 为什么我的扩展捆绑包没有处理services.yml文件?
  • 如何向扩展捆绑包添加额外服务?

1 个答案:

答案 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(),但事实并非如此。但希望这有助于某人。