Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Silex FormServiceProvider无法加载类型“;表格「;使用Symfony3组件时_Php_Symfony_Silex_Symfony2 Forms - Fatal编程技术网

Php Silex FormServiceProvider无法加载类型“;表格「;使用Symfony3组件时

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',

尝试生成表单时,我收到以下错误:

FormRegistry.php第87行中的InvalidArgumentException:无法加载 键入“表格”

我已经注册了FormServiceProvider、TranslationServiceProvider和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 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();
请参阅

附言:这是一个讨论的总结。我已经测试过这种方法是否有效