在尝试构建表单时,我收到此错误:
FormRegistry.php第87行中的InvalidArgumentException:无法加载类型"form"
我已经注册了FormServiceProvider,TranslationServicerProvider和ValidatorServiceProvider.
这是我的代码的相关部分:
$this->_form = $this->_app['form.factory']->createBuilder('form', $this->_map()) ->add('firstName', 'text', [ 'constraints' => [new Assert\NotBlank()] ]) ->add('lastName', 'text', [ 'constraints' => [new Assert\NotBlank()] ]) ->add('email', 'text', [ 'constraints' => [new Assert\Email()] ]) ->getForm();
以下是我正在使用的相关组件的版本号:
silex/silex v1.3.4基于Symfony组件的PHP微框架symfony/security-core
v3.0.1 Symfony安全组件 - 核心库symfony/security-csrf v3.0.1 Symfony安全组件 - CSRF库symfony/translation v3.0.1 Symfony Translation Component symfony/twig-bridge v3.0.1 Symfony Twig Bridge symfony/validator v3.0.1 Symfony Validator Component symfony/form v3.0.1
我能够在之前版本的Silex中成功地做到这一点; 做了什么破坏或我错过了什么?
似乎最新版本Silex
不起作用Symfony Forms v3
.要使其工作,请在您的composer文件中替换require:
{ "require": { "silex/silex": "^1.3", "symfony/form": "~2.3", "symfony/security-csrf": "~2.3" } }
实际上,您可以将Symfony Form 3与Silex一起使用,但createBuilder函数现在要求您遵循将Types作为参数传递的新方法.Silex文档尚未更新以反映这一点.
在2.8之前的版本中,类型传递为字符串,如'form','text','email'等,Symfony组件将其解析为正确的类.现在你必须传入一个类名.
那么,过去的form
现在变成了Symfony\Component\Form\Extension\Core\Type\FormType::class
.并text
成为Symfony\Component\Form\Extension\Core\Type\TextType::class
.当然,您可以导入这些类,这样就不必使用完整的命名空间.
可以使用以下代码修复此线程中发布的特定问题:
use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\EmailType; $this->_form = $this->_app['form.factory'] ->createBuilder(FormType::class, $this->_map()) ->add( 'firstName', TextType::class, [ 'constraints' => [new Assert\NotBlank()] ] ) ->add( 'lastName', TextType::class, [ 'constraints' => [new Assert\NotBlank()] ] ) ->add( 'email', EmailType::class, [ 'constraints' => [new Assert\Email()] ] ) ->getForm();
请参阅官方文档.
PS:这是这里讨论的总结.我测试过这个有效.