Symfony. Как построить форму? - PullRequest
0 голосов
/ 09 мая 2019

Как реализовать форму, которая принимает следующий 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 Ответ

1 голос
/ 09 мая 2019

Возможно, попробуйте использовать 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,
        ]);
    }
}
...