尝试构建表单时收到此错误:
FormRegistry.php第87行中的InvalidArgumentException:无法加载 输入"表格"
我已注册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 PHP微框架 基于Symfony组件 symfony中/安全核心
v3.0.1 Symfony安全组件 - 核心库 symfony / security-csrf v3.0.1 Symfony安全性 组件 - CSRF库 symfony / translation v3.0.1 Symfony翻译组件 symfony / twig-bridge v3.0.1 Symfony Twig Bridge symfony / validator v3.0.1 Symfony Validator组件 symfony / form v3.0.1
我能够在先前版本的Silex中成功完成此操作;做了什么破坏或我错过了什么?
答案 0 :(得分:7)
似乎Silex
的最新版本不适用于Symfony Forms v3
。
要使其工作,请将作曲家文件中的require替换为:
{
"require": {
"silex/silex": "^1.3",
"symfony/form": "~2.3",
"symfony/security-csrf": "~2.3"
}
}
答案 1 :(得分:5)
您实际上可以将Symfony Form 3与Silex一起使用,但是createBuilder函数现在要求您遵循传递Types作为参数的新方法。 Silex文档尚未更新以反映这一点。
在pre 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();
P.S:这是here讨论的摘要。我测试过这个有效。
答案 2 :(得分:3)
将Symfony组件降级到版本2.8.1解决了问题;这显然是Silex和Symfony3之间的向后兼容问题。