在symfony2中创建自定义表单类型:无法覆盖buildView()

时间:2012-02-29 14:03:16

标签: php forms symfony

我正在symfony2中创建自定义表单类型。但是每当我尝试覆盖buildForm()方法时,我都会收到此错误:

  

致命错误:SeduceMe \ SiteBundle \ Form \ Type \ UniFormTextType :: buildView()的声明必须与/ Users / alexander / Projekte / SeduceMe /中的Symfony \ Component \ Form \ FormTypeInterface :: buildView()的声明兼容第33行的serversymfony204 / src / SeduceMe / SiteBundle / Form / Type / UniFormTextType.php

我当然明白这意味着什么。我甚至从上面提到的界面复制了方法签名。还是一样。这是我的班级:

namespace SeduceMe\SiteBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class UniFormTextType extends AbstractType 
{
    public function getDefaultOptions(array $options)
    {
        return array('placeholder' => null);
    }

    public function getParent(array $options)
    {
        return 'text';
    }

    public function getName()
    {
        return 'UniFormText';
    }

    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->setAttribute('placeholder', $options['placeholder']);
    }

    public function buildView(FormView $view, FormInterface $form)
    {
        $view->set('placeholder', $form->getAttribute('placeholder'));
    }
}

2 个答案:

答案 0 :(得分:3)

需要为FormView和FormInterface添加use语句。

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormError;
use Symfony\Component\Form\CallbackValidator;
use Symfony\Component\Form\FormValidatorInterface;

答案 1 :(得分:1)

本节中的symfony doc错误:

http://symfony.com/doc/2.0/book/forms.html#creating-form-classes

FormTypeInterface::buildView()现在需要FormBuilderInterface,而不是FormBuilder,这就是错误所抱怨的内容。

所以你必须这样做:

use Symfony\Component\Form\FormBuilderInterface;

并在方法声明中使用它也是这样:

public function buildForm(FormBuilderInterface $builder, array $options)