我正在尝试为页面实体创建一个带有类别选择器的表单-页面在多个注册表中可以有多个类别。
Page-->Category中的关系是一个OneToMany/ManyToOne,它具有一个中间PagesCategoryEntity,该实体具有鉴别器属性(categoryRegistryId)。
我已经成功地学会了如何使用FormBuilder中的"实体"类型来创建一个多选框。但最终,我需要有多个选择框(用于每个注册表),在html中的某个地方有一个鉴别器值。
因此,我需要知道如何将PagesCategoryEntity的附加属性获取到表单中,然后如何在PageEntity的getters/ssetters中访问它们。
当然,我不可能是唯一一个在中间实体中具有值的人,这些值需要在形式和持久性层中访问?
我很感激你花时间看这个!
craig
为简洁性截断了实体和形式类
class CategoryEntity
{
/**
* @ORMId
* @ORMGeneratedValue
* @ORMColumn(type="integer")
*/
private $id;
// other properties, getters, setters, etc...
}
class PageEntity
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORMOneToMany(targetEntity="PagesCategoryEntity",
* mappedBy="page", cascade={"all"},
* orphanRemoval=true, indexBy="categoryRegistryId")
*/
private $categories;
// other properties, getters, setters, etc...
}
class PagesCategoryEntity
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue
*/
private $id;
/**
* @ORMColumn(type="integer")
*/
private $categoryRegistryId;
/**
* @ORMManyToOne(targetEntity="CategoryEntity")
* @ORMJoinColumn(name="categoryId", referencedColumnName="id")
*/
private $category;
/**
* @ORMManyToOne(targetEntity="PageEntity", inversedBy="categories")
* @ORMJoinColumn(name="entityId", referencedColumnName="pageid")
*/
private $page;
}
class PageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('categories', 'entity', array(
'class' => 'MyCoolBundle:CategoryEntity',
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('c')
->where('c.parent = :parent')
->setParameter('parent', 19)
->orderBy('c.name', 'ASC');
},
'property' => "name",
'multiple' => true,
'required' => false,
'empty_data' => null,
));
}
}
然后试试这个:
->add('categories',
'entity',
array(
'class'=>'AcmeMycoolBundleEntityCategory',
'property'=>'name',
'query_builder' => function (AcmeMycoolBundleEntityCategoryRepository $repository)
{
return $repository->createQueryBuilder('c')
->where('c.parent = :parent')
->setParameter('parent', 19)
->add('c.name', 'ASC');
}
)
);
如果你没有,试着创建一个类别存储库,并根据你的需要调整脚本,这对我很有用!
尝试使用Collection而不是Entity!
集合用于一对多/多对一
你可以试试symfony食谱的收集表格教程http://symfony.com/doc/current/cookbook/form/form_collections.html
我希望它能有所帮助;)