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

сделал это, не добавляя параметры формы / изменения настроек по умолчанию.
Спасибо

29

Решение

В версия 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 */
}
40

Другие решения

Рассматривали ли вы использование configureOptions функция вместо setDefaultOptions:

protected function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'xxx',
'option1' => [],
'option2' => 3,
'intention' => 'xxx',
'cascade_validation' => true
));
}
13

По вопросам рекламы [email protected]