当前位置:  开发笔记 > 编程语言 > 正文

使用Symfony3组件时,Silex FormServiceProvider无法加载"form"类型

如何解决《使用Symfony3组件时,SilexFormServiceProvider无法加载"form"类型》经验,为你挑选了2个好方法。

在尝试构建表单时,我收到此错误:

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中成功地做到这一点; 做了什么破坏或我错过了什么?



1> Igor Pantovi..:

似乎最新版本Silex不起作用Symfony Forms v3.要使其工作,请在您的composer文件中替换require:

{
    "require": {
        "silex/silex": "^1.3",
        "symfony/form": "~2.3",
        "symfony/security-csrf": "~2.3"
    }
}



2> dnshio..:

实际上,您可以将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:这是这里讨论的总结.我测试过这个有效.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有