Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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 неясна в отношении типов форм, объявленных службой. Что с этим делать?