在我的Symfony 3.x项目中,我有3个实体:
答案 0 :(得分:2)
所以我发现它工作的唯一方法是:
在Repository类中(拉出包含子属性和类别的所有属性的列表):
$this->getEntityManager()
->createQueryBuilder()
->select('t, category, children')
->join('t.category', 'category')
->leftJoin('t.children', 'children')
->where('t.parent IS NULL')
->orderBy('category.sortOrder', 'ASC')
->addOrderBy('t.sortOrder', 'ASC')
->addOrderBy('t.name', 'ASC');
$entities = $query->getResult();
$options = [];
/** @var Property $entity */
foreach ($entities as $entity) {
$options[$entity->getCategory()->getName()][] = $entity;
}
在Entity类中(拉动所选属性的ID列表,预先选择视图文件中的复选框):
public function getPropertyIds() {
$properties = $this->getProperties();
$propertyIds = [];
foreach ($properties as $property) {
$propertyIds[] = $property->getId();
}
return $propertyIds;
}
版本表格类,因此可以验证数据:
$builder
->add(
'properties',
EntityType::class,
[
'label' => 'Properties',
'class' => Property::class,
'choice_label' => 'name',
'placeholder' => '',
'expanded' => true,
'multiple' => true,
'required' => false,
]
);
最后,视图文件:
{% for categoryName, items in properties %}
<h2>{{ categoryName }}</h2>
<ul>
{% for property in items %}
<li>
<input type="checkbox"
name="{{ form.properties.vars.full_name }}[]"
value="{{ property.id }}"
id="{{ form.properties.vars.id }}_{{ property.id }}">
<label for="{{ form.properties.vars.id }}_{{ property.id }}">
{{ property.name }}
</label>
</li>
{% endfor %}
</ul>
{% endfor %}
{% do form.properties.setRendered %}
(我在视图中省略了“checked”和“children”部分)
然而,就我而言,这种解决方案并不理想。我宁愿摆脱在视图中手动生成<input...>
- 我宁愿使用一些辅助函数。
无论如何,这是我的问题的某种低级解决方案。希望有所帮助。