bes*_*nce 3 php symfony silex symfony2-forms
在尝试构建表单时,我收到此错误:
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();
Run Code Online (Sandbox Code Playgroud)
以下是我正在使用的相关组件的版本号:
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"
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可以将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();
Run Code Online (Sandbox Code Playgroud)
请参阅官方文档.
PS:这是这里讨论的总结.我测试过这个有效.