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']));