无法在第91行的vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php中加载"text"类型

Emp*_*men 12 forms symfony

我正在使用Symfony标准版,一切都在Symfony2.X版本中工作,直到我将其更新到3.0.x-dev.

即使在较新版本中,除了在Controller中出现错误的页面外,一切都有效:

无法加载类型"文本"500内部服务器错误 - InvalidArgumentException

  1. 在第91行的vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php中
  2. 在FormRegistry - > getType('text')在vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php的第84行
  3. at FormFactory - > createNamedBuilder('flag','text',null,array())in vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php at 106行
  4. 在FormBuilder - >创建('flag','text',array())在vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php第267行
  5. 在FormBuilder - > supplier/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php中的215的resolveChildren()
  6. 在FormBuilder - > src/MyProject中的getForm()/ FrontOfficeBundle/Controller/ChallengeController.php第418行

在Controller中我使用了这段代码:

$form = $this->createFormBuilder()
->add("flag","text")
->add("validate","button")
->getForm();
Run Code Online (Sandbox Code Playgroud)

即使我删除了第一个add("flag","text"),错误也会切换到:

无法加载类型"按钮"

所以我认为问题在于方法getForm().我觉得该方法createFormBuilder()需要一个参数,所以我试图传递一个对象Flag,它有很多参数(flag,validate,...).

问题没有改变,就像在这个版本中更改了语法,但是当我验证文档时,我没有在语法中发现任何问题.

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

composer update
Run Code Online (Sandbox Code Playgroud)

我删除了缓存和日志文件但存在问题.

谢谢你的帮助,抱歉我的英语不好.

qoo*_*mao 24

@CarlosGranados的意思read the 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)并且是由于表单名称text/ button被弃用以支持其完全限定的类名(FQCN).

从UPGRADE-2.8.md

类型名称已弃用,将在Symfony 3.0中删除.您应该使用完全限定的类名(FQCN)来引用它们,而不是按名称引用类型.使用PHP 5.5或更高版本,您可以使用"class"常量:

之前:

$form = $this->createFormBuilder()
    ->add('name', 'text')
    ->add('age', 'integer')
    ->getForm();
Run Code Online (Sandbox Code Playgroud)

后:

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();
Run Code Online (Sandbox Code Playgroud)

...它继续告诉你更多......