【问题标题】:Symfony update form field base on a Symfony event基于 Symfony 事件的 Symfony 更新表单字段
【发布时间】:2021-04-23 09:11:02
【问题描述】:

我正在使用 Symfony 处理表单:

我有固定值的颜色类型:

我需要根据表单事件向这个固定列表添加其他值

这个想法是当我渲染表单时,检查是否存在另一个颜色值并将这个值推送到当前列表

 ->add('color', ColorType::class, [
                'required' => false,
                'invalid_message' => 'La couleur est incorrecte.',
                'choice_label' => function ($value) {
                    return $value;
                },
            ])
 ->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onCustomForm'])

我添加了一个事件来获取颜色值:

 public function onCustomForm(FormEvent $event)
    {

        $form = $event->getForm();
        $data = $form->getConfig()->getData();
        $color = $data->getColor();
//        dd($color);
}

我想将颜色值添加到现有列表值中

【问题讨论】:

    标签: forms symfony events


    【解决方案1】:

    我认为您无法使用 Symfony ColorType 实现这一点,因为它们没有添加或限制颜色的选项。

    你必须使用 ChoiceType

    public function onCustomForm(FormEvent $event)
    {
        $form = $event->getForm();
        /** @var SettingData $data */
        $data = $event->getData();
        // If the setting data is already set
        if ($data && !$data->getData()->isEmpty()) {
            $apiColors = ...// Fetch your colors from api
            $originalColors = $form->get('color')->getConfig()->getData();
             $form->add('color', ChoiceType::class, [
                'choices' => array_merge($apiColors, $originalColors),
                'expanded' => false,
                'multiple' => false
             ]);
        }
    }
    

    事实上,添加一个现有的字段('color')会​​替换它。

    所以,这就是您使用新数据更新它的方式。

    【讨论】:

    • 不,我还有一个固定列表,我从 API 获得另一个值,我想将此值添加到现有列表中,
    • 也许你可以在你的问题中明确这一点?你能编辑它并提供这些新信息吗
    • 我更新了问题,我有一个固定的颜色列表,我应该检查是否存在另一个值(来自 api 的值)并将这个值推送到现有列表
    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    相关资源
    最近更新 更多