Форма Symfony: как работать с вложенным JSON? - PullRequest
0 голосов
/ 06 июля 2019

Я создал три связанных объекта для опроса: Question, Options и Answer.

/**
 * @ORM\Entity(repositoryClass="App\Repository\QuestionRepository")
 */
class Question
{
    // ...
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Answer", mappedBy="question")
     */
    private $answers;

    /**
     * @Groups({"question"})
     * @ORM\OneToMany(targetEntity="App\Entity\Options", mappedBy="question")
     */
    private $options;

    public function __construct()
    {
        $this->options = new ArrayCollection();
        $this->answers = new ArrayCollection();
    }
    // ...
}

/**
 * @ORM\Entity(repositoryClass="App\Repository\OptionsRepository")
 */
class Options
{
    // ...
    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="options")
     * @ORM\JoinColumn(nullable=false)
     */
    private $question;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Answer", mappedBy="options")
     */
    private $answers;

    public function __construct()
    {
        $this->answers = new ArrayCollection();
    }
    // ...
}

/**
 * @ORM\Entity(repositoryClass="App\Repository\AnswerRepository")
 */
class Answer
{
    // ...
    /**
     * @Assert\NotBlank()
     * @Groups({"answer"})
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="answers")
     * @ORM\JoinColumn(nullable=false)
     */
    private $user;

    /**
     * @Groups({"answer"})
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    private $text;

    /**
     * @Groups({"answer"})
     * @ORM\ManyToMany(targetEntity="App\Entity\Options", inversedBy="answers")
     */
    private $options;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="answers")
     * @ORM\JoinColumn(nullable=false)
     */
    private $question;

    public function __construct()
    {
        $this->options = new ArrayCollection();
    }
    // ...
}

App \ Form \ AnswerType:

class AnswerType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('text')
            ->add('user')
            ->add('question')
            ->add('options', EntityType::class, [
                'class' => Options::class,
                'multiple' => true
            ])
        ;
    }

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

Мне нужно сохранить результаты опроса в Answer объекте.Как я могу обработать этот почтовый запрос?Этот запрос будет отправлен в форме отправки.Каждая строка Answer является вложенным объектом JSON.

[
    {
        "question": "1",
        "user": "1",
        "text": "",
        "options": [
            "1",
            "2",
            "3"
        ]
    },
    {
        "question": "2",
        "user": "1",
        "text": "text",
        "options": [
            ""
        ]
    },
    {
        "question": "3",
        "user": "1",
        "text": "",
        "options": [
            "4"
        ]
    }
]

В результате каждый из этих вложенных объектов JSON (вопрос, пользователь, текст, параметры) должен стать строкой в ​​таблице ответов.Я имею в виду, что свойство объекта json question должно иметь место в столбце question_id в таблице Answer и т. Д.

...