PHP致命错误:I';我正在尝试在我的Symfony2应用程序中实现Form\AbstractType
我得到以下错误:PHP致命错误:I';我正在尝试在我的Symfony2应用程序中实现Form\AbstractType,php,symfony,namespaces,Php,Symfony,Namespaces,我得到以下错误: 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
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
我不知道为什么会出现这个错误。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 ... */
}
FormBuilderInterface,Symfony2为FormBuilder实现FormBuilderInterface
这并没有改变这样一个事实,buildForm
必须声明为在父类中,并接受实现FormBuilderInterface
的任何对象,因此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 ... */
}
这就是你的意思吗?所以,仅仅因为它接受FormBuilderInterface作为参数,并不意味着你可以向它传递FormBuilder?你可以,但在方法声明中你必须使用FormBuilderInterface
。如果你接受绑定到接口的类,情况总是这样吗?这个答案是正确的,文件不正确。文档显示了具体类的使用,而不是接口。别忘了更新“use”语句。我想他们可能已经更新了文档。我根据文档的最新版本更新了我的代码,它成功了。以后,您可以深入研究源代码。例如,XDebug以Symfony/Component/Form的形式给出了文件的位置,它们都在这里(完整路径是vendor/Symfony/src/Symfony/…)。然后,您可以很容易地找到“AbstractType”,并查看导致问题的方法的签名是什么。