在symfony2:can';中创建自定义表单类型;t覆盖buildView()


Creating a custom form type in symfony2: can't overwrite buildView()

我正在symfony2中创建一个自定义表单类型。但每次我试图覆盖buildForm()方法时,我都会收到以下错误:

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

我当然理解这意味着什么。我甚至从上面提到的接口复制了方法签名。还是一样。这是我的课:

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'));
    }
}

需要为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;

本节中的符号文档错误:

http://symfony.com/doc/2.0/book/forms.html#creating-表单类

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

所以你必须这样做:

use Symfony'Component'Form'FormBuilderInterface;

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

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