有以下代码
$form->with('Item')->add('parent', null, array(
'label' => 'Category',
'required' => true,
'query_builder' =>
function($er) use ($id) {
$qb = $er->createQueryBuilder('p');
if ($id){
$qb->where('p.id <> :id')
->setParameter('id', $id);
}
$qb->orderBy('p.root, p.lft', 'ASC');
return $qb;
}
.........
Result是赋予字符串的实体对象集合(__toString方法)。它返回名称字段。但我需要得到另一个领域 - 网址。
如何获取url值而不是select-list表单中的名称? query_builder类型返回object =>如何更改此表单,它同样适用于query_builder?
我没有使用SonataAdminBundle表单,但我认为它的工作方式与symfony表单完全相同。这里你需要的是将'class'
和'property'
值添加到你的选项列表中:
$form->with('Item')->add('parent', null, array(
'class' => 'Acme\DemoBundle\Entity\Category',
'property' => 'url',
'label' => 'Category',
'required' => true,
'query_builder' =>
function($er) use ($id) {
$qb = $er->createQueryBuilder('p');
if ($id){
$qb->where('p.id <> :id')
->setParameter('id', $id);
}
$qb->orderBy('p.root, p.lft', 'ASC');
return $qb;
}
property - 是实体中将表示您的Entity值而不是调用__toString()
的字段的名称。但是......如果您需要始终将您的实体表示为URL,您可以简单地将Entity类中的__toString()
方法覆盖为:
public function __toString() {
return $this->url;
}