Forms 无法加载类型“;“文本”;在第91行的vendor/symfony/symfony/src/symfony/Component/Form/FormRegistry.php中

Forms 无法加载类型“;“文本”;在第91行的vendor/symfony/symfony/src/symfony/Component/Form/FormRegistry.php中,forms,symfony,Forms,Symfony,我使用的是Symfony标准版,在我将其更新到3.0.X-dev之前,一切都在Symfony2.X版本中运行 即使在较新的版本中,除了在控制器中出现错误的页面外,所有内容都正常工作: 无法加载类型“text”500内部服务器错误- 无效辩论例外 在vendor/symfony/symfony/src/symfony/Component/Form/FormRegistry.php中 第91行 在vendor/symfony/symfony/src/symfony/Component/Form/Fo

我使用的是Symfony标准版,在我将其更新到3.0.X-dev之前,一切都在Symfony2.X版本中运行

即使在较新的版本中,除了在控制器中出现错误的页面外,所有内容都正常工作:

无法加载类型“text”500内部服务器错误- 无效辩论例外

  • 在vendor/symfony/symfony/src/symfony/Component/Form/FormRegistry.php中 第91行
  • 在vendor/symfony/symfony/src/symfony/Component/Form/FormFactory.php中的FormRegistry->getType('text'),位于 第84行
  • 在vendor/symfony/symfony/src/symfony/Component/Form/FormBuilder.php中的FormFactory->createNamedBuilder('flag','text',null,array()) 第106行
  • 在FormBuilder->在vendor/symfony/symfony/src/symfony/Component/Form/FormBuilder.php中创建('flag'、'text',array()),位于 第267行
  • 在供应商/symfony/symfony/src/symfony/Component/Form/FormBuilder.php中的FormBuilder->resolveChildren() 第215行
  • 在src/MyProject/FrontOfficeBundle/Controller/ChallengeController.php中的FormBuilder->getForm() 第418行
  • 在控制器中,我使用了以下代码:

    $form = $this->createFormBuilder()
    ->add("flag","text")
    ->add("validate","button")
    ->getForm();
    
    即使我删除了第一个添加(“标志”、“文本”),错误也会切换到:

    无法加载类型“按钮”

    因此我认为问题在于方法
    getForm()
    。我说方法
    createFormBuilder()
    需要一个参数,所以我试图传递一个对象标志,它有许多参数(标志、验证等)

    这个问题没有改变,就像这个版本中的语法被改变了一样,但是当我验证时,我没有发现我的语法有任何问题

    表单的版本是3.0-dev。我在github项目中验证了它,这些文件是最新的。我曾经

    composer update
    
    我删除了缓存和日志文件,但问题仍然存在


    感谢您的帮助,我的英语很差,对此表示歉意。

    CarlosGranados所说的
    阅读UPGRADE-3.0.md
    是指阅读一个文件,该文件告诉您如何将代码从2.x改为3.0,而不是如何升级symfony代码库。不幸的是,它没有提到如何处理这个表单问题

    [UPGRADE-2.8.md]中介绍了您将面临的问题(https://github.com/symfony/symfony/blob/2.8/UPGRADE-2.8.md)
    这是由于表单名称
    文本
    /
    按钮
    被弃用,取而代之的是它们的完全限定类名(FQCN)

    从升级到2.8.md

    类型名称已弃用,将在Symfony 3.0中删除。您不应按名称引用类型,而应改为按其完全限定类名(FQCN)引用类型。对于PHP 5.5或更高版本,您可以使用“class”常量:

    之前:

    $form = $this->createFormBuilder()
        ->add('name', 'text')
        ->add('age', 'integer')
        ->getForm();
    
    之后:

    use Symfony\Component\Form\Extension\Core\Type\IntegerType;
    use Symfony\Component\Form\Extension\Core\Type\TextType;
    
    $form = $this->createFormBuilder()
        ->add('name', TextType::class)
        // or ->add('name', Symfony\Component\Form\Extension\Core\Type\TextType)
        ->add('age', IntegerType::class)
        // or ->add('age', Symfony\Component\Form\Extension\Core\Type\IntegerType)
        ->getForm();
    

    。。。接下来,它会告诉你更多…

    我们的Web服务器仍然是PHP5.3,所以我必须为symfony3找到解决办法,因为我不能在我们的实时服务器上使用TextType::class

    通过将常量设置为类引用,可以最小化大型窗体上的代码:

    //use Symfony\Component\Form\Extension\Core\Type\EmailType;
    //use Symfony\Component\Form\Extension\Core\Type\TextType;
    
    const textType = 'Symfony\Component\Form\Extension\Core\Type\TextType';
    const emailType = 'Symfony\Component\Form\Extension\Core\Type\EmailType';
    
    class ProfileType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('username', textType, array('label' => 'Username'))
                ->add('address1', textType, array('label' => 'Address1'))
                ->add('address2', textType, array('label' => 'Address2'))
                ->add('postcode', textType, array('label' => 'Postcode'))
             ;
        }
    

    这对我有用

    请注意,3.0分支的文档不在您发送的链接中,而是在此处:。您可以使用页面右上角的下拉列表更改文档的版本。另外,请务必阅读Symfony安装中的UPGRADE-3.0.md文档,以获得升级到3.0所需的更改列表。谢谢您的回答,是的,我指的是此链接,但它是相同的。我没有在composer中升级我的项目,我已经下载了symfony的主版本(3.0.x-dev),并将我的项目放在了src中。然后我用composer安装并更新了所有内容,因此我没有升级到-3.0.md。除了这个页面,我所有的页面都可以正常工作。谢谢你分享我的页面。我刚刚用TextareaType修改了几行,比如TextType和TextareaType,还有更多,但是非常感谢你的帮助@qoopmao