我有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
要将所有病理连接到新用户,只需将其添加到
__construct
的User
中public function __construct() {
// get all phatologies
foreach ($allPhatologies as UserPathologie) {
$this->userPathologies->add(new UserPathologie());
}
}
关于php - Symfony2在多个实体上嵌入表格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26137298/