由于"Symfony''Component''OptionsResolver''OptionsResolverInterface"在SF2.6中被弃用,我试图更新我的FormTypes:
<?php
namespace Xxx'XxxBundle'Form'Type;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolver;
/**
* @uses Symfony'Component'Form'AbstractType
* @uses Symfony'Component'Form'FormBuilderInterface
* @uses Symfony'Component'OptionsResolver'OptionsResolver
* @package Xxx'XxxBundle'Form'Type
*/
class XxxType extends AbstractType
{
/**
* default form builder
*
* @param 'Symfony'Component'Form'FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('xxx', 'text') // ...
}
/**
* @param 'Symfony'Component'OptionsResolver'OptionsResolver $resolver
*/
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(
[
'data_class' => 'xxx',
'option1' => [],
'option2' => 3,
'intention' => 'xxx',
'cascade_validation' => true
]
);
}
/**
* @return string
*/
public function getName()
{
return 'xxx';
}
}
问题是 AbstractType 仍然期望 "setDefaultOptions(OptionsResolverInterface $resolver)" 而不是 "OptionsResolover"
声明必须与 FormTypeInterface->setDefaultOptions(解析器:''Symfony''Component''OptionsResolver''OptionsResolverInterface)兼容
我这里缺少什么吗?
谢谢;)
编辑
已将我的控制器调用从
$form = $this->createForm(
new XxxType(),
$xxxEntity,
[
'option1' => $array
]
);
自
$form = $this->createForm(
new XxxType([
'option1' => $array
]),
$xxxEntity
);
并将其添加到表单类型中:
protected $option1;
public function __construct($options)
{
$this->option1 = $options['option1'];
}
做到了,现在没有添加表单选项/更改默认值。谢谢
在 2.6 版中,FormBuilder
中没有这个函数的真正替代品因此,如果使用版本 2.6。它仍然可以使用...
然而
在symfony版本2.7中,函数
public function setDefaultOptions(OptionsResolverInterface $resolver)
已替换为:
public function configureOptions(OptionsResolver $resolver)
为了提供降级功能,这是要走的路:
public function setDefaultOptions(OptionsResolverInterface $resolver) {
/** @var OptionResolver $resolver */
$this->configureOptions($resolver);
}
public function configureOptions(OptionsResolver $resolver) {
/* define your defaults here */
}
您是否考虑过使用 configureOptions
函数而不是setDefaultOptions
:
protected function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'xxx',
'option1' => [],
'option2' => 3,
'intention' => 'xxx',
'cascade_validation' => true
));
}