我正在尝试在我的表单中使用查询字符串给出的一些数据。我搜索了互联网并找到了一个很好的解释(http://bicknoyle.com/2014/04/passing-query-string-params-form-symfony/):
class RegistrationFormType extends BaseType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('refer', 'user_refer_type');
$builder->addEventListener(FormEvents::POST_SET_DATA, function(FormEvent $event) use ($options) {
if (isset($options['request'])) {
$form = $event->getForm();
$form->get('source')->setData($options['request']->query->get('source'));
}
});
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setOptional(array(
'request'
));
$resolver->setAllowedTypes(array(
'request' => 'Symfony\Component\HttpFoundation\Request'
));
}
我找到了另一种使用请求范围的方法:
class RegistrationFormType extends BaseType
{
private $request = null;
public function __construct(Request $request)
{
$this->request = $request;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('refer', 'user_refer_type');
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event)
{
$form = $event->getForm();
$form->get('refer')->setData($this->request->query->get('refer'));
});
}
我对代码有一些疑问:
- 实施此类事情的“更好”方式是什么?
一般来说,我可以总结一下,第一种方法需要访问控制器来传递请求对象,第二种方法需要请求范围。 - 我错过了另一个好方法吗?