Creating a custom form type in symfony2: can't

2019-07-20 04:10发布

I am creating a custom form type in symfony2. But every time I try to overwrite the buildForm() method I get this error:

Fatal error: Declaration of SeduceMe\SiteBundle\Form\Type\UniFormTextType::buildView() must be compatible with that of Symfony\Component\Form\FormTypeInterface::buildView() in /Users/alexander/Projekte/SeduceMe/serversymfony204/src/SeduceMe/SiteBundle/Form/Type/UniFormTextType.php on line 33

Of course I understand what this means. I even copied the method signature from the mentioned interface. Still the same. This is my class:

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条回答
beautiful°
2楼-- · 2019-07-20 04:32

Need to add use statements for FormView and FormInterface.

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;
查看更多
\"骚年 ilove
3楼-- · 2019-07-20 04:49

The symfony doc is wrong in this section:

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

FormTypeInterface::buildView() now requires FormBuilderInterface, not FormBuilder, which is what that error is complaining about.

So you must do:

use Symfony\Component\Form\FormBuilderInterface;

And use that in your method declaration also like so:

public function buildForm(FormBuilderInterface $builder, array $options)
查看更多
登录 后发表回答