无法加载Symfony2表单扩展

时间:2015-08-20 16:47:08

标签: php forms symfony

Symfony似乎没有加载AppBundle\Form\Extension中找到的任何类,而the documentation建议将其注册为服务之后应该加载。

我的扩展程序如下所示:

<?php
//src/AppBundle/Form/Extension/FieldTypeExampleExtension.php

namespace AppBundle\Form\Extension;

use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class FieldTypeExampleExtension extends AbstractTypeExtension
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->setAttribute('example', $options['example']);
    }

    public function buildView(FormView $view, FormInterface $form, array $options)
    {
        $view->vars['example'] = $options['example'];
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'example' => null,
        ));
    }

    public function getExtendedType()
    {
        return 'form';
    }

}

并将其注册为如此服务:

#services.yml
AppBundle.ExampleExtension:
    class: AppBundle\Form\Extension\FieldTypeExampleExtension
    tags:
        - { name: form.type_extension, alias: field }

当我尝试使用此扩展程序时,出现以下错误:

    $builder->add('city', 'text',array(
        'required' => false,
        //'help is made available by https://github.com/simplethings/SimpleThingsFormExtraBundle
        'help' => 'separate multiple cities with a comma. Example: Chicago, Miami, San Fransisco',
        'example' => 'that those them'
    ))
  

选项“示例”不存在。

FieldTypeExampleExtension.php中输入明显的语法错误时,表单仍然没有错误地呈现,这让我相信扩展从未加载过。 Symfony文档和other blog posts表明它会自动加载。

有没有办法强制加载?或以其他方式实施扩展名?

1 个答案:

答案 0 :(得分:1)

  

标记的别名键是此扩展名的字段类型   应该适用于。

您不能调用您的扩展程序,只能调用正常的“文本”字段。别名是关键,在你的示例'字段'中,所以你应该这样做:

$builder->add('city', 'field', ......

或者,如果您想扩展文本字段类型,您将使用“text”作为别名,并更改getExtendedType()函数以返回“text”。