Symfony 2.3 FormType $ options继承

时间:2015-05-08 06:46:55

标签: php forms symfony

TL; DR: 是否有任何方法可以使用' context'选项自动级联所有表单类型? NOT 可以在表单类型中手动传递它:

$builder->add('organizer', 'organizer_type', array('context' => $options['context']));

大家好,

我已经写了所有Symfony表单类型的扩展名:

class ContextExtension extends AbstractTypeExtension
{
    protected $context;

    public function __construct(SecurityContextInterface $context)
    {
        $this->context = $context->getToken()->getUser()->getContext();
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults([
            'context' => $this->context
        ]);
        $resolver->setAllowedTypes(['context' => 'GOC\Bundle\FrameworkBundle\Model\ContextInterface']);
    }

    /**
     * Returns the name of the type being extended.
     *
     * @return string The name of the type being extended
     */
    public function getExtendedType()
    {
        return 'form';
    }
}

我已经验证它已注册并正在工作(大部分时间)。我只面临一个问题。当我在这样的表单类型中设置我的新选项(' context')时:

class EventType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add(
            'eventgroup', 'eventgroup_type', array(
                'context' => $context,
            )
        )
    }

    public function getName()
    {
        return 'event';
    }
}

我在事件组表单类型中收到选项,可以在那里使用它:

class EventGroupType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $this->log($options['context']);

        $builder
            ->add('name', 'text')
            ->add('comment', 'text')
            ->add('organizer', 'organizer_type')
        ;
    }

    public function getName()
    {
        return 'eventgroup_type';
    }
}

但是,似乎选项不会进一步级联,因此无法在文本或管理器类型中使用。是否有任何方法可以使用' context'选项自动级联所有表单类型? NOT 可以在表单类型中手动传递它,如下所示:

$builder->add('organizer', 'organizer_type', array('context' => $options['context']));

0 个答案:

没有答案