我有3个实体
用户

class User extends BaseUser
{
    /**
     * @ORM\OneToMany(targetEntity="UserPathologie", mappedBy="user")
     */
    protected $userPathologies;
}


病理学

class Pathologie
{
    /**
     * @var string
     *
     * @ORM\Column(name="nom", type="string", length=255)
     */
    private $nom;

    /**
     * @ORM\OneToMany(targetEntity="UserPathologie", mappedBy="pathologie")
     */
    protected $userPathologies;
}


用户路径

class UserPathologie
{
    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="userPathologies")
     */
    protected $user;

    /**
     * @ORM\ManyToOne(targetEntity="Pathologie", inversedBy="userPathologies")
     */
    protected $pathologie;

     /**
     * @var boolean
     *
     * @ORM\Column(name="atteint", type="boolean")
     */
    private $atteint;

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

}


然后,在“用户”表单上,我想要所有“病理”的列表以及“ atteint”复选框和textarea“ cause”复选框。

例如:

--label--病理-/ label--

病理A:是/否-文本区域原因

病原B:是/否-文本区域原因

病理C:是/否-文本区域原因

病理D:是/否-文本区域原因

病理E:是/否-文本区域原因

我按照下面的步骤进行操作,但是不方便的是,每行都应使用javascript动态添加,并且“病理”位于选择字段中。

在UserRegiterType中

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('userPathologies', 'collection', array(
            'type' => new UserPathologieType(),
            'label' => false,
            'allow_add' => true,
        ));
}


在UserPathologieType中,我有

public function buildForm(FormBuilderInterface $builder, array $options)
{

    $builder
        ->add('pathologie')
        ->add('atteint', 'checkbox', array(
            'label' => false,
            'required' => false,
        ))
        ->add('cause', 'textarea', array(
            'label' => 'Cause',
            'required' => false,
        ));
}

最佳答案

为了避免在选择字段中使用patologies,请覆盖该字段的小部件

{% block pathologie_widget %}
    <b>{{ value }}</b>
{% endblock %}


有关主题的详细信息,请参见http://symfony.com/doc/current/book/forms.html#form-theming

或者根据您呈现集合的方式,也可以采用这种方式:
Symfony2 formbuilder - entity readonly field as label

要将所有病理连接到新用户,只需将其添加到__constructUser

public function __construct() {

   // get all phatologies

   foreach ($allPhatologies as UserPathologie) {
       $this->userPathologies->add(new UserPathologie());
   }

}

关于php - Symfony2在多个实体上嵌入表格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26137298/

10-12 13:15