子表单的选项

Options to subform

如何将表单的选项提供给子表单?

在下面的示例中,我声明了选项 "special"。 我想在我的子表单中访问此选项 "special"。

我的主要形式:

class DemandeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', TextType::class, []);

        $builder->add('service_agent', ServiceType::class, [
            'mapped' => false
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'special' => true
        ]);
    }

还有我的子表单:

class ServiceType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        dump($options['special']);
        $builder->add('service', TextType::class, []);

        $builder->add('agent', TextType::class, [
            'mapped' => false
        ]);
    }
    public function configureOptions(OptionsResolver $resolver)
    {
    }

我回答我的问题。

我必须在子表单中声明选项 "special"。 并且该字段的选项可以在主窗体中访问。

像那样:

class DemandeType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('title', TextType::class, []);

        $builder->add('service_agent', ServiceType::class, [
            'mapped' => false,
            'special' => $options['special']
        ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'special' => true
        ]);
    }

在我的子表单中:

class ServiceType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        dump($options['special']); // It's OK :)
        $builder->add('service', TextType::class, []);

        $builder->add('agent', TextType::class, [
            'mapped' => false
        ]);
    }
    public function configureOptions(OptionsResolver $resolver)
    {
       $resolver->setDefaults([
            'special' => true
        ]);
    }