【问题标题】:Symfony custom form type, use Options ResolverSymfony 自定义表单类型,使用 Options Resolver
【发布时间】:2021-04-26 15:01:03
【问题描述】:

我正在使用 symfony 为我的项目创建一个表单。

根据事件,我检查是否有额外的颜色数据将此数据添加到当前列表。

  ->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
            $data = $event->getData();
            $new_color_value = $data->getColor();

            $form = $event->getForm();

            $form->add('color', ColorType::class, [
                'required' => false,
                'invalid_message' => 'La couleur est incorrecte.',
                'other_color_if_exists' => $new_color_value,
                'choice_label' => function ($choice, $key, $value) {
                    return $value;
                },
            ]);
        })

我的自定义颜色类型:

     public function configureOptions(OptionsResolver $resolver)
{
    $parameters = $this->session->get('parameters');

    $resolver->setDefault('color_from_api', false);
    $resolver->setAllowedTypes('other_color_if_exists', ['null', 'string']);

    $resolver->setDefault('choices', function (Options $options) use ($parameters) {
        if ($options['color_from_api']){
            array_push($parameters['color'], $options['color_from_api']);
        }
        return array_unique($parameters['color']);
    });
}
    public function getParent()
    {
        return ChoiceType::class;
    }

现在我不使用会话,但出现错误:

【问题讨论】:

    标签: forms symfony


    【解决方案1】:

    您应该能够为'color_from_api' 创建/传递一个选项。使用 OptionsResolver 设置默认的 'choices' 并带有闭包。

    在自定义颜色类型中:

    public function configureOptions(OptionsResolver $resolver)
    {
      $parameters = $this->session->get('parameters');
    
      $resolver->setDefault('color_from_api', false);
      $resolver->setDefault('choices', function (Options $options) use ($parameters) {
        if ($options['color_from_api']){
          array_push($parameters['color'], $options['color_from_api']);
        }
    
        return array_unique($parameters['color']);
      });
    
    }
    

    在控制器中:

    $form = $this->createForm(MyEntityType::class, $entity, [
      'color_from_api' => $entity->getColor(),
    ]);
    

    https://symfony.com/doc/current/components/options_resolver.html#default-values-that-depend-on-another-option

    【讨论】:

    • 您好,感谢您的帮助,我根据您的解决方案更新了我的问题,但出现错误 other_color_if_exists 不存在。
    • 感谢您的帮助,我不需要使用 other_color_if_exists 选项,我只是使用 color_from_api 来获取新颜色
    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多