【问题标题】:Symfony - ChoiceType with multiple and resetViewTransformers returns invalid_messageSymfony - 具有多个和 resetViewTransformers 的 ChoiceType 返回 invalid_message
【发布时间】:2022-01-28 09:57:59
【问题描述】:

2 个月前我们将项目升级到 Symfony 4.4.35,现在我注意到一个奇怪的行为。当我使用具有以下配置的 ChoiceType 时,表单返回错误(此值无效):

$builder->add('items', ChoiceType::class, [
    'required' => FALSE,
    'multiple' => TRUE,
]);
$builder->get('items')->resetViewTransformers();

帖子:

form[items][0]: "val1"
form[items][1]: "val2"

谁能告诉我发生了什么变化?我试图检查 ChoiceType.php,并找出 problem is here:

$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use (&$unknownValues, $messageTemplate) {
    if (\count($unknownValues) > 0) {
        // here is append error to form
    }
});

问题是:如何创建具有可变长度和自定义值的多选?

【问题讨论】:

  • 如何为该字段配置有效值?
  • 有一个对象包含带有 getter/setter 的 (private $items) 属性。没有特殊验证...在配置选项“data_class”中提到了对象。
  • 您说的是映射数据。我的问题是关于表单字段:什么是有效值以及它们是如何在表单中配置的?正如您在源代码中找到的:// Throw exception if unknown values were submitted(第 174 行)
  • 如你所见,有一个叫做resetViewTransformers(值可以是各种)。就我而言,它是一个字符串数组。用户可以添加任意数量的字符串进行多选。

标签: php symfony symfony-forms


【解决方案1】:

我必须使用 Symfony\Component\Form\Extension\Core\Type\CollectionType 和选项 allow_add

$builder->add('items', CollectionType::class, [
    'allow_add' => TRUE,
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 2020-12-10
    相关资源
    最近更新 更多