PHP致命错误:我正在尝试在Symfony2应用程序中实现Form\AbstractType

Rez*_*a S 8 php namespaces symfony

我收到以下错误:

Fatal error: Declaration of Bean\OauthServerBundle\Form\Type\AuthorizeFormType::buildForm() must be compatible with Symfony\Component\Form\FormTypeInterface::buildForm(Symfony\Component\Form\FormBuilderInterface $builder, array $options) in src/Bean/OauthServerBundle/Form/Type/AuthorizeFormType.php on line 25
Run Code Online (Sandbox Code Playgroud)

不知道为什么我得到这个错误.AbstractType :: buildForm()采用FormBuilderInterface,Symfony2实现FormBuilder的FormBuilderInterface.

这是我的来源的内容:

<?php
namespace Bean\OauthServerBundle\Form\Type;

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

class AuthorizeFormType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        /* some code ... */
   }

   /* more code ... */
}
Run Code Online (Sandbox Code Playgroud)

dev*_*ler 10

FormBuilderInterface和Symfony2为FormBuilder实现FormBuilderInterface.

这不会改变事实,buildForm必须在父类中声明并接受任何实现的对象FormBuilderInterface.

  • 这个答案是正确的,文档http://symfony.com/doc/2.0/book/forms.html不正确.文档显示了具体类的使用,而不是接口.不要忘记更新"使用"声明. (2认同)

Dec*_*bal 9

因此symfony book中的代码应该如下所示:

namespace Bean\OauthServerBundle\Form\Type;

use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\AbstractType;

class AuthorizeFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        /* some code ... */
   }

   /* more code ... */
}
Run Code Online (Sandbox Code Playgroud)

你是这个意思吗?