【问题标题】:Symfony Forms - Adding input arraySymfony Forms - 添加输入数组
【发布时间】:2018-05-30 09:11:28
【问题描述】:

所以我正在尝试为我的表单创建一个输入数组,但在文档中还没有找到任何资源(如果是这样的话,我可能错过了一些东西,所以链接)。

简而言之,我想渲染这样的东西:

<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);
}

在控制器中。

但我有一种可怕的感觉,已经有办法做到这一点,只是我一直没能找到它。否则我必须在我的 twig 模板中使用 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;
    }
}

谢谢

【问题讨论】:

  • 最好的方法是not to mix forms with entities。顺便说一句,对实体属性使用蛇形表示法有什么特别的原因吗?
  • @emix 真的吗?他们有一个EntityType - 如果他们不想将实体与表单混合,这不是违反直觉吗?我用make:entity 生成了这个类,对我来说,数据库字段应该是snake_case而不是camelCase
  • 1) 他们有EntityType,所以技术含量较低的人可以更快地进行原型制作,我不想进一步讨论这个问题。仅仅因为存在单例模式,并不意味着您应该使用它 2) 确定数据库属性,而不是实体属性
  • @emix 1) 这很公平,Magento 有类似的方法,但应该避免。 2) 但我使用了make:entity,所以它会从数据库属性中自动生成我的类属性

标签: forms symfony symfony4


【解决方案1】:

您可以将ChoiceType(用于字符串)或EntityType(用于实体)与'multiple' =&gt; true 结合使用。

【讨论】:

  • 那一半有效,但我如何使用结果数组从实体发布到不同的表?
  • 我需要更多信息来帮助您。您可以发布您的实体吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
相关资源
最近更新 更多