Symfony Forms - Добавление входного массива

Итак, я пытаюсь создать входной массив для своей формы, но не нашел для этого никаких ресурсов в документации (я мог что-то пропустить, поэтому ссылка, если это так).

Вкратце, я хотел бы сделать что-то вроде этого:

<select name = "my-select" id = "some-select">
    <option value = "a">A</option>
    <option value = "b">B</option>
    <option value = "c">C</option>
</select>

<button type = "button" class = "btn btn-primary" id = "add-new-option">
    Add Another Option
</button>

поэтому идея состоит в том, что пользователь может выбрать вариант A, нажать кнопку, чтобы добавить вариант C, а также A к объекту.

Результаты опций сохраняются в такой таблице:

entity_id  option_value
1          A
1          C
2          B
2          A

Я думал сделать это так:

foreach ($arrayInput as $key => $value)
{
    $option = new Option();
    $option->setEntityId($entity->getId());
    $option->setOptionValue($value);
}

в контроллере.

Но у меня ужасное чувство, что уже есть способ сделать это, я просто не смог его найти. В противном случае мне придется использовать HTML в своих шаблонах веточек, и я пытаюсь сократить это количество ..

Так является ли описанный выше метод лучшим способом добиться того, чего я хочу?

Моя текущая сущность:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass = "App\Repository\PageRepository")
 */
class Page
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type = "integer")
     */
    private $id;

    /**
     * @ORM\Column(type = "string", length=125)
     */
    private $title;

    /**
     * @ORM\Column(type = "text")
     */
    private $content;

    /**
     * @ORM\Column(type = "boolean")
     */
    private $approved;

    /**
     * @ORM\Column(type = "datetime")
     */
    private $created_ts;

    /**
     * @ORM\Column(type = "datetime", nullable=true)
     */
    private $last_edit_ts;

    /**
     * @ORM\Column(type = "integer")
     */
    private $author_id;

    /**
     * @ORM\ManyToOne(targetEntity = "App\Entity\Tag")
     */
    private $tag;

    public function getTag(): ?Tag
    {
        return $this->tag;
    }

    public function getId()
    {
        return $this->id;
    }

    public function getTitle(): ?string
    {
        return $this->title;
    }

    public function setTitle(string $title): self
    {
        $this->title = $title;

        return $this;
    }

    public function getContent(): ?string
    {
        return $this->content;
    }

    public function setContent(string $content): self
    {
        $this->content = $content;

        return $this;
    }

    public function getApproved(): ?bool
    {
        return $this->approved;
    }

    public function setApproved(bool $approved): self
    {
        $this->approved = $approved;

        return $this;
    }

    public function getCreatedTs(): ?\DateTimeInterface
    {
        return $this->created_ts;
    }

    public function setCreatedTs(\DateTimeInterface $created_ts): self
    {
        $this->created_ts = $created_ts;

        return $this;
    }

    public function getLastEditTs(): ?\DateTimeInterface
    {
        return $this->last_edit_ts;
    }

    public function setLastEditTs(?\DateTimeInterface $last_edit_ts): self
    {
        $this->last_edit_ts = $last_edit_ts;

        return $this;
    }

    public function getAuthorId(): ?int
    {
        return $this->author_id;
    }

    public function setAuthorId(int $author_id): self
    {
        $this->author_id = $author_id;

        return $this;
    }
}

Спасибо

Лучший способ - не смешивать формы с сущностями. Кстати, есть какая-то конкретная причина для использования нотации змеиного регистра для свойств сущности?

emix 30.05.2018 11:36

@emix правда? У них есть EntityType - разве это не противоречило бы интуиции, если бы они не хотели смешивать сущности с формами? И я создал класс с make:entity, и для меня поле базы данных должно быть snake_case, а не camelCase

treyBake 30.05.2018 11:49

1) У них есть EntityType, поэтому менее техничные люди могут быстрее создавать прототипы, я не хочу обсуждать это дальше. Тот факт, что существует шаблон Singleton, не означает, что вы должны его использовать 2) Конечно, свойства базы данных, но не свойства сущности

emix 30.05.2018 11:51

@emix 1) вполне справедливо, у Magento есть похожие методы, но их следует избегать. 2) но я использовал make:entity, поэтому он автоматически генерирует свойства моего класса из свойств базы данных.

treyBake 30.05.2018 11:56
JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
4
441
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать ChoiceType (для строк) или Тип объекта (для сущностей) с 'multiple' => true.

эта половина работает, но как мне затем использовать массив результатов для публикации в другую таблицу из объекта?

treyBake 30.05.2018 11:24

Мне нужна дополнительная информация, чтобы помочь вам. Можете ли вы опубликовать свою сущность?

Vyctorya 30.05.2018 11:31

Другие вопросы по теме