今天是个好日子
我有与ProductType实体相关的Product实体,具有多对一关系
我有基于'entity'字段类型的自定义ProductsType字段:
class ProductsType extends AbstractType
{
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(
[
'label' => 'oq.company.interest.label',
'class' => 'OQReferenceBundle:Product',
'required' => false,
'expanded' => true,
'multiple' => true,
'choice_label' => 'name',
'empty_value' => 'oq.reference.interest.choose',
'query_builder' => function ($repository) {
$qb = $repository->createQueryBuilder('p');
$qb->leftJoin('OQReferenceBundle:ProductType', 'pt', 'WITH', 'p.productType = pt.id')
->addOrderBy('pt.name', 'ASC')
->addOrderBy('p.name', 'ASC');
return $qb;
},
]
);
}
/**
* @return string
*/
public function getName()
{
return 'oq_products_selector';
}
/**
* @return string
*/
public function getParent()
{
return 'entity';
}
}
'oq_products_selector_widget'代码:
{% block oq_products_selector_widget %}
<div {{ block('widget_container_attributes') }}>
{% for id, child in form %}
<div class="oro-clearfix">
{{ form_widget(child) }}
<label for="{{ child.vars.id }}">
{{ choices[id].data.name }} ({{ choices[id].data.productType.name }})
</label>
</div>
{% endfor %}
</div>
{% endblock %}
但是,当我尝试渲染表单时,有一个例外:
无法访问null变量的属性(“id”)
据我所知,相关实体数据没有传递给选择数据数组,无法通过 choices[id].data.productType.name
显示
我如何将这些数据传递给选择?
1 回答
嗯,我解决了那个麻烦 .
我想实体字段类型为没有相关实体的选择数组水合对象 . 所以我将自定义字段类型父级切换为'choice',然后我收到了所有实体,用于选择EntityManager和标准存储库的
findAll
方法,并从所有链接实体(ProductType)获取数据,没有任何问题The code
正如你所看到的,我得到所有实体的选择并将它们放在数组中 . 然后我得到所有相关的实体名称并将它们放入另一个数组中 . 并将此数组传递给
'choice_attr' => $choicesAttrs
参数的选项 .之后我可以访问这些附加数据