我正在使用Symfony标准版,一切都在Symfony2.X版本中工作,直到我将其更新到3.0.x-dev.
即使在较新版本中,除了在Controller中出现错误的页面外,一切都有效:
无法加载类型"文本"500内部服务器错误 - InvalidArgumentException
- 在第91行的vendor/symfony/symfony/src/Symfony/Component/Form/FormRegistry.php中
- 在FormRegistry - > getType('text')在vendor/symfony/symfony/src/Symfony/Component/Form/FormFactory.php的第84行
- at FormFactory - > createNamedBuilder('flag','text',null,array())in vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php at 106行
- 在FormBuilder - >创建('flag','text',array())在vendor/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php第267行
- 在FormBuilder - > supplier/symfony/symfony/src/Symfony/Component/Form/FormBuilder.php中的215的resolveChildren()
- 在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)
...它继续告诉你更多......