如何获取奏鸣曲中字段类型的自定义值?

时间:2021-06-18 08:15:36

标签: symfony sonata-admin

使用 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',
            ])

有什么想法吗?

2 个答案:

答案 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 %}

相关问题