使用 Sonata,当我创建一个带有 choiceType 的合同时,用户可以选择 contract1 或 contract2,在我的数据库中,我将获得“451”的 contract1 和“678”的 contract2。
在我的字段列表中,我的所有数据都显示出来,但对于我的合同,我有“451”或“678”,我希望用 contract1 或 contract2 代替这些数字。
这是我创建合同的字段:
$mapper
->add('contract', ChoiceType::class, [
'choices' => [
'contract1' => '451',
'contract2' => '678',
],
])
在我的字段代码中,我不知道如何判断 451 然后是“contract1”。我是这样开始的:
->add('contract', null, [
'label' => 'Contract',
])
有什么想法吗?
答案 0 :(得分:0)
您可以使用表单实体类型来解决您的问题:
$builder->add('contract', EntityType::class, [
// looks for choices from this entity
'class' => Contract::class,
// uses the Contrzct.name property as the visible option string
'choice_label' => 'name',
// Query builder to select your to specific contract
'query_builder' => function (ContractRepositoty $contractRepository) {
return $contractRepository->createQueryBuilder('support_time_slot')
->where('contract.id in :ids')
->setParameter('ids', [461,678])
->orderBy('contract.name');
},
// used to render a select box, check boxes or radios
'multiple' => true,
'expanded' => true,
]);
答案 1 :(得分:0)
我找到了解决方案。我创建了一个特定的模板,并在其中翻译了我想要的值:
->add('contract', null, [
'label' => 'Contract',
'template' => 'AdminBundle:ContractAdmin:list__operation.html.twig'
])
还有我的树枝:
{% extends 'SonataAdminBundle:CRUD:base_list_field.html.twig' %}
{% block field %}
{% if value %}
{{ ('contract.operation.'~value~'.value')|trans }}
{% endif %}
{% endblock %}