php symfony symfony-2.6

php - SF2.6 OptionsResolverInterface obsoleto y AbstractType: setDefaultOptions



symfony symfony-2.6 (3)

¿Ha considerado usar la función configureOptions , en lugar de setDefaultOptions :

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

ya que "Symfony / Component / OptionsResolver / OptionsResolverInterface" está en desuso en SF2.6 Intenté actualizar mis 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''; } }

El problema es que AbstractType aún espera "setDefaultOptions (OptionsResolverInterface $ resolver)" en lugar de "OptionsResolover"

La declaración debe ser compatible con FormTypeInterface-> setDefaultOptions (resolver: / Symfony / Component / OptionsResolver / OptionsResolverInterface)

¿Hay algo que me falta aquí?

Gracias ;)

EDITAR

Cambié mi llamada de controlador de

$form = $this->createForm( new XxxType(), $xxxEntity, [ ''option1'' => $array ] );

a

$form = $this->createForm( new XxxType([ ''option1'' => $array ]), $xxxEntity );

y agregar esto al FormType:

protected $option1; public function __construct($options) { $this->option1 = $options[''option1'']; }

lo hizo, sin agregar opciones de forma / cambiar los valores predeterminados ahora. Gracias


Bueno chicos intenté cambiar todos los formularios en mi aplicación Symfony de setDefaultOptions a configureOptions(OptionsResolver $resolver) Pero seguí obteniendo UndefinedOptionException .

Desafortunadamente, la documentación para Option Resolver en SF 2.6 no es clara acerca de los tipos de formularios que declara el servicio. Que hacer con eso?


En la versión 2.6 no hay un reemplazo real para esta función dentro de FormBuilder
Por lo tanto, si usa la versión 2.6. todavía se puede usar ...
sin embargo
En Symfony versión 2.7, la función

public function setDefaultOptions(OptionsResolverInterface $resolver)

ha sido reemplazado por:

public function configureOptions(OptionsResolver $resolver)

para proporcionar una funcionalidad de degradación, este es el camino a seguir:

public function setDefaultOptions(OptionsResolverInterface $resolver) { /** @var OptionResolver $resolver */ $this->configureOptions($resolver); } public function configureOptions(OptionsResolver $resolver) { /* define your defaults here */ }