[英]Silex FormServiceProvider could not load type “form” when using Symfony3 Components
在嘗試構建表單時,我收到此錯誤:
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轉換組件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:這是這里討論的總結。 我測試過這個有效。
將Symfony組件降級到版本2.8.1解決了這個問題; 這顯然是Silex和Symfony3之間的向后兼容問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.