Fer*_*ret 30 php symfony symfony-2.6
由于在SF2.6中不推荐使用"Symfony\Component\OptionsResolver\OptionsResolverInterface",我试图更新我的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';
}
}
Run Code Online (Sandbox Code Playgroud)
问题是AbstractType仍然需要"setDefaultOptions(OptionsResolverInterface $ resolver)"而不是"OptionsResolover"
声明必须与FormTypeInterface-> setDefaultOptions兼容(解析器:\ Symfony\Component\OptionsResolver\OptionsResolverInterface)
这里有什么遗失吗?
谢谢 ;)
编辑
改变了我的控制器呼叫
$form = $this->createForm(
new XxxType(),
$xxxEntity,
[
'option1' => $array
]
);
Run Code Online (Sandbox Code Playgroud)
至
$form = $this->createForm(
new XxxType([
'option1' => $array
]),
$xxxEntity
);
Run Code Online (Sandbox Code Playgroud)
并将其添加到FormType:
protected $option1;
public function __construct($options)
{
$this->option1 = $options['option1'];
}
Run Code Online (Sandbox Code Playgroud)
做了它,没有添加表单选项/现在更改默认值.谢谢
Nic*_*aus 40
在2.6版本中,FormBuilder中没有真正的替代函数
.因此,如果使用2.6版本.它仍然可以使用...
但是
在symfony版本2.7中的功能
public function setDefaultOptions(OptionsResolverInterface $resolver)
Run Code Online (Sandbox Code Playgroud)
已被替换为:
public function configureOptions(OptionsResolver $resolver)
Run Code Online (Sandbox Code Playgroud)
为了提供降级功能,这是要走的路:
public function setDefaultOptions(OptionsResolverInterface $resolver) {
/** @var OptionResolver $resolver */
$this->configureOptions($resolver);
}
public function configureOptions(OptionsResolver $resolver) {
/* define your defaults here */
}
Run Code Online (Sandbox Code Playgroud)
dev*_*ius 13
您是否考虑过使用configureOptions功能,而不是setDefaultOptions:
protected function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'xxx',
'option1' => [],
'option2' => 3,
'intention' => 'xxx',
'cascade_validation' => true
));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11362 次 |
| 最近记录: |