2

我有这两个实体CommandPredetermined它们是相关的ManyToMany

class Command
{
    use IdentifierAutogeneratedTrait;
    use TimestampableEntity;
    use ActiveTrait;

    /**
     * @var string
     * @ORM\Column(type="string", length=150)
     */
    private $name;

    /**
     * @var string
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;

    /**
     * @var Predetermined[]
     * @ORM\ManyToMany(targetEntity="Predetermined", mappedBy="commands", cascade={"persist"})
     */
    private $predetermined;

    ...
}

class Predetermined
{
    use IdentifierAutogeneratedTrait;
    use TimestampableEntity;
    use ActiveTrait;

    /**
     * @var string
     * @ORM\Column(type="string", length=160)
     * @Assert\NotBlank()
     */
    private $smsText;

    /**
     * @var Command[]
     * @ORM\ManyToMany(targetEntity="Command", inversedBy="predetermined", cascade={"persist", "remove"})
     * @ORM\JoinTable(name="predetermined_has_command")
     */
    private $commands;

    ...
}

有什么办法,使用一种形式(我在这里看到的唯一一种)来改变他们的行为方式吗?看看下面的图片:

2016-01-27_22-57-56

我允许在这里选择许多命令,这就是我使用ManyToMany但...

2016-01-27_22-58-11

在这个我没有,所以我仍然需要使用相同的实体,但在表单级别更改行为。任何人都可以给我一些帮助吗?我如何实现这一目标?

4

1 回答 1

1

通常使用multipleFormBuilder 字段中的属性,例如

$builder->add('commands', 'entity', array(
    'class'     => 'YourBundle:Command',
    'multiple'  => yourCondition ? true : false,
));

我从这个PR找到了 EasyAdminBundle 方式,你应该可以使用以下

// app/config/admin/entities/YourEntity
fields:
    - { property: 'commands', multiple: false }

对于一种形式,对于另一种形式,将其设置为 false。
或者您可以定义一个参数,例如:

- { property: 'commands', multiple: %condition% }
于 2016-01-29T21:46:22.953 回答