【问题标题】:Creating a custom form type in symfony2: can't overwrite buildView()在 symfony2 中创建自定义表单类型:无法覆盖 buildView()
【发布时间】:2012-02-29 14:03:15
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php forms symfony


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这个部分的 symfony 文档是错误的:

      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)
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多