Php Silex FormServiceProvider无法加载类型“;表格「;使用Symfony3组件时
尝试生成表单时,我收到以下错误: FormRegistry.php第87行中的InvalidArgumentException:无法加载 键入“表格” 我已经注册了FormServiceProvider、TranslationServiceProvider和ValidatorServiceProvider 以下是我的代码的相关部分:Php Silex FormServiceProvider无法加载类型“;表格「;使用Symfony3组件时,php,symfony,silex,symfony2-forms,Php,Symfony,Silex,Symfony2 Forms,尝试生成表单时,我收到以下错误: FormRegistry.php第87行中的InvalidArgumentException:无法加载 键入“表格” 我已经注册了FormServiceProvider、TranslationServiceProvider和ValidatorServiceProvider 以下是我的代码的相关部分: $this->_form = $this->_app['form.factory']->createBuilder('form',
$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 PHP微框架
基于Symfony组件
symfony/安全核心v3.0.1 Symfony安全组件-核心库 symfony/security csrf v3.0.1 symfony security 组件-CSRF库 symfony/translation v3.0.1 Symfony翻译组件 symfony/twig bridge v3.0.1 symfony twig bridge symfony/validator v3.0.1 symfony验证程序组件 symfony/form v3.0.1
在以前版本的Silex中,我成功地做到了这一点;有什么东西坏了还是我遗漏了什么?最新版本的
Silex
似乎不适用于Symfony Forms v3
。
若要使其正常工作,请替换composer文件中的以下内容:
{
"require": {
"silex/silex": "^1.3",
"symfony/form": "~2.3",
"symfony/security-csrf": "~2.3"
}
}
将Symfony组件降级到2.8.1版修复了该问题;这显然是Silex和Symfony3之间的向后兼容性问题 实际上,您可以将Symfony Form 3与Silex一起使用,但createBuilder函数现在要求您遵循以参数形式传入类型的新方法。Silex文件尚未更新以反映这一点 在2.8之前的版本中,类型通常作为字符串传递,如“表单”、“文本”、“电子邮件”等,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();
请参阅
附言:这是一个讨论的总结。我已经测试过这种方法是否有效