Symfony。如何建立表格?

时间:2019-05-09 09:12:45

标签: symfony symfony4 symfony-4.2

如何实现接受以下JSON对象的表单? 我没有定义任何模型,因为我不需要它们。数据已发送

{
  "type_of_error": "logic error",
  "severity": "normal",
  "what_did_you_do": "something",
  "what_happened": "blue screen",
  "which_result": "full satisfaction",
  "requests": [
    {
      "url": "/api/v1/agent/statistic"
    }
  ]
}

我已经开始构建表格:

class ErrorReportFormType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('type_of_error', TextType::class, [
                'empty_data' => '',
                'constraints' => [
                    new NotBlank()
                ]
            ])
            ->add('severity', TextType::class, [
                'empty_data' => '',
                'constraints' => [
                    new NotBlank()
                ]
            ])
            ->add('what_did_you_do', TextType::class, [
                'empty_data' => '',
                'constraints' => [
                    new NotBlank()
                ]
            ])
            ->add('what_happened', TextType::class, [
                'empty_data' => '',
                'constraints' => [
                    new NotBlank(),
                ]
            ])
            ->add('which_result', TextType::class, [
                'empty_data' => '',
                'constraints' => [
                    new NotBlank(),
                ]
            ])
            ->add('requests', CollectionType::class, [
                'entry_type'   => RequestsFormType::class,
            ])
        ;
    }

我已经定义了这样的RequestsFormType。怎么了看起来,好像RequestsFormType不会被接受。

class RequestsFormType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('url', TextType::class, [
                'empty_data' => '',
                'constraints' => [
                    new NotBlank()
                ]
            ]);
    }

    public function getBlockPrefix()
    {
        return '';
    }
}

1 个答案:

答案 0 :(得分:1)

也许尝试使用CollectionType。

查看此处:https://symfony.com/doc/current/reference/forms/types/collection.html

$builder->add('requests', CollectionType:class, [
    'entry_type'   => YourCustomType::class,
]);

YourCustomType:

class YourCustomType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('url', TextType::class, []);
        $builder->add('method', TextType::class, []);
        $builder->add('timestamp', DateTimeType::class, []);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Requests::class,
        ]);
    }
}