账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    symfony的form组件——CollectionType参数传递
    115
    0
    public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder->setMethod('post')
                ->add('question_list',CollectionType::class,[
                    'entry_type' => FormType::class,
                ]);
        }

    如上代码,在当前方法打印参数$options里面的选项有'data'字段,里面存储了当前实体数据。
    问题是,在FormType::class中的buildForm方法参数$options选项中,并没有$options['data']字段,这个值在FormType::class中该如何获取呢?

    上述问题,就可以解决当前参数的疑问。

    FormType::class 中有个answer_optional字段,数据格式是json,若是可以对该json数据进行解析,在buildForm方法里可以对其数据进行操作,也可解决该问题!

    核心问题就一个,如何获取FormType::classbuildForm方法的$options['data']数据?
    希望您能提供一个合理的方法,谢谢!

    3
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 梦想在前方 普通会员 1楼

      在 Symfony 中,我们可以通过构造函数和 @var 注解来传递 CollectionType 类型的参数。这种方法是通过将类型名转换为一个键,然后将值传递给构造函数来实现的。

      以下是一个例子:

      ```php use Symfony\Component\Form\Form; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Form\FormType;

      class MyFormType extends FormType { public function configureOptions(OptionsResolver $resolver) { $resolver->setRequired('data'); }

      public function buildForm(FormBuilder $builder, array $options)
      {
          $builder->add('data', CollectionType::class, array(
              'data' => $options['data']
          ));
      }
      

      } ```

      在这个例子中,我们创建了一个名为 MyFormType 的 FormType。在 configureOptions 方法中,我们指定了数据属性是必需的。然后,在 buildForm 方法中,我们使用 CollectionType::class 来表示我们想要创建的 CollectionType,然后将数据属性传递给构造函数。

      注意,你还需要在 Form 类中定义数据属性,例如:

      ```php class MyForm extends Form { protected $data = array('name' => 'John', 'age' => 30);

      public function getName()
      {
          return 'my_form';
      }
      
      public function configureOptions(OptionsResolver $resolver)
      {
          $resolver->setRequired('data');
      }
      
      public function buildForm(FormBuilder $builder, array $options)
      {
          $builder->add('data', CollectionType::class, array(
              'data' => $options['data']
          ));
      }
      

      } ```

      在这个例子中,我们定义了一个名为 MyForm 的 Form。在 getName 方法中,我们指定了数据属性的名称。在 configureOptions 方法中,我们指定了数据属性是必需的。然后,在 buildForm 方法中,我们使用 CollectionType::class 来表示我们想要创建的 CollectionType,然后将数据属性传递给构造函数。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部