gpt4 book ai didi

php - 表单实体 : add an extra option

转载 作者:行者123 更新时间:2023-12-03 23:57:35 24 4
gpt4 key购买 nike

我使用 Symfony 表单来过滤一组数据。比如说,有一个“用户”下拉列表过滤日志记录表(每条记录都可以与用户链接,但不能链接)。

换句话说,LogRecord <- many-to-one nullable -> User
问题是我希望它支持下拉列表中的 2 个选项:所有用户(禁用此字段过滤)和“无用户”,它应该过滤具有字段 = NULL 的记录。但是我不知道如何学习表单来区分这些情况,而不是破坏表单验证过程。有任何想法吗?

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->setMethod('GET');

$builder
->add('user', EntityType::class, array(
'class' => 'AppBundle:User',
'choice_label' => 'name',
'placeholder' => 'All',
'query_builder' => function (UserRepository $repo) {
return $repo->findForOptionsQueryBuilder();
},
'label' => 'User',
'required' => false,
));
}

当前下拉列表:
  • 全部
  • 用户 1
  • 用户 2

  • 所需的下拉列表:
  • 全部
  • 无(空)
  • 用户 1
  • 用户 2
  • 最佳答案

    一个想法可能是使用 ChoiceType反而。像这样的东西:

    // all your users
    $choices = $repo->findForOptionsQueryBuilder()->getQuery()->getResult();

    // add None option
    $choices = array_merge(['None' => 0], $choices);

    $builder->add('user', ChoiceType::class, [
    'choices' => $choices,
    'placeholder' => 'All', // add All option to beginning
    'required' => false,
    'choice_label' => function ($value, $key) {
    return $value ?: $key;
    },
    ]);
    这应该呈现以下 HTML 输入:
    <select id="form_user" name="form[user]">
    <option value="">All</option>
    <option value="0">None</option>
    <option value="1">User A</option>
    <option value="2">User B</option>
    <option value="3">User C</option>
    </select>
    并且,在提交事件时:
  • 如果选择“全部”选项,则 $form->get('user')->getData()等于 null
  • 如果选择“无”选项,则 $form->get('user')->getData()等于 0
  • 如果选择了“用户 A”选项,则 $form->get('user')->getData()User 的一个实例

  • 因此,您可以在不中断表单验证过程的情况下区分这些情况。

    关于php - 表单实体 : add an extra option,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41587178/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com