无法在第91行

时间:2015-10-16 00:40:54

标签: forms symfony

我正在使用 Symfony标准版,一切都在 Symfony2.X 版本中运行,直到我将其更新为 3.0.x-dev < /强>

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

  

无法加载类型“text”500内部服务器错误 -   InvalidArgumentException

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

在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

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

感谢您的帮助,抱歉我的英语不好。

2 个答案:

答案 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() ...

这对我有用!