我正在使用 Symfony标准版,一切都在 Symfony2.X 版本中运行,直到我将其更新为 3.0.x-dev < /强>
即使在较新的版本中,除了在Controller中出现错误的页面外,一切正常:
无法加载类型“text”500内部服务器错误 - InvalidArgumentException
- 在vendor / symfony / symfony / src / Symfony / Component / Form / FormRegistry.php中 第91行
- at FormRegistry - &gt; getType('text')in vendor / symfony / symfony / src / Symfony / Component / Form / FormFactory.php at 第84行
- 在FormFactory - &gt; createNamedBuilder('flag','text',null,array())在vendor / symfony / symfony / src / Symfony / Component / Form / FormBuilder.php中 在第106行
- 在FormBuilder中 - &gt;在vendor / symfony / symfony / src / Symfony / Component / Form / FormBuilder.php中创建('flag','text',array())at 第267行
- 在FormBuilder中 - &gt; resolveChildren()在vendor / symfony / symfony / src / Symfony / Component / Form / FormBuilder.php中 第215行
- 在FormBuilder中 - &gt; getForm()在src / MyProject / FrontOfficeBundle / Controller / ChallengeController.php中 第418行
醇>
在Controller中我使用了这段代码:
$form = $this->createFormBuilder()
->add("flag","text")
->add("validate","button")
->getForm();
即使我删除了第一个添加(“flag”,“text”),错误也会切换到:
无法加载“按钮”类型
所以我认为问题出在方法getForm()
中。我认为方法createFormBuilder()
需要一个参数,所以我试图传递一个对象Flag,它有很多参数(flag,validate,...)。
问题没有改变,就像在这个版本中更改了语法,但是当我验证了documentation时,我的语法中没有发现任何问题。
表单的版本是 3.0-dev 。我在github项目中验证了它,这些文件是最新的。我用了
composer update
我删除了缓存和日志文件但存在问题。
感谢您的帮助,抱歉我的英语不好。
答案 0 :(得分:23)
read the UPGRADE-3.0.md
的@CarlosGranados意味着读取文件,告诉您如何将代码从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();
后:
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();
......它继续告诉你更多......
答案 1 :(得分:2)
我们的网络服务器仍处于php 5.3 - 所以我必须找到symfony3的变通方法,因为我无法在我们的实时服务器上使用TextType :: class。
您可以通过为类引用设置常量来最小化大型表单上的代码:
row_number() ...
这对我有用!