SF2.6 OptionsResolverInterface устарела и AbstractType: setDefaultOptions
поскольку "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 (resolver:\Symfony\Component\OptionsResolver\OptionsResolverInterface)
Здесь что-то не хватает?
Спасибо;)
ИЗМЕНИТЬ
Изменен мой вызов контроллера из
$form = $this->createForm(
new XxxType(),
$xxxEntity,
[
'option1' => $array
]
);
к
$form = $this->createForm(
new XxxType([
'option1' => $array
]),
$xxxEntity
);
и добавив это в FormType:
protected $option1;
public function __construct($options)
{
$this->option1 = $options['option1'];
}
сделал это, не добавляя теперь параметры формы/изменяя значения по умолчанию.
Благодаря
Ответы
Ответ 1
В версии 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 */
}
Ответ 2
Считаете ли вы использование функции configureOptions
вместо setDefaultOptions
:
protected function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'xxx',
'option1' => [],
'option2' => 3,
'intention' => 'xxx',
'cascade_validation' => true
));
}
Ответ 3
Ну, ребята, я попробовал изменить все формы в своем приложении symfony от setDefaultOptions
до configureOptions(OptionsResolver $resolver)
Но я продолжал получать UndefinedOptionException
.
К сожалению, документация для Option Resolver в SF 2.6 неясна в отношении типов форм, объявленных службой. Что с этим делать?