опция choice_attr. Расширенная конфигурация

1

Я хочу добавить атрибут для каждой опции select, значение которого является значением данного свойства.

У меня есть следующий тип типа:

class ExtraEntityType extends AbstractType
{

    /**
     * Configures the options for this type.
     *
     * @param OptionsResolver $resolver The resolver for the options.
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $propertyAccessor = new PropertyAccessor();
        $choiceAttr = function ($choice, $key) use (&$propertyAccessor) {
            $value = $propertyAccessor->getValue($choice, 'foo');

            return ['data-extra-value' => $value];
        };

        $resolver
            ->setRequired(['extra_property'])
            ->setAllowedTypes('extra_property', 'string')
            ->setDefault('choice_attr', $choiceAttr);
    }

    /**
     * {@inheritdoc}
     */
    public function getParent()
    {
        return 'entity';
    }

    /**
     * Returns the name of this type.
     *
     * @return string The name of this type
     */
    public function getName()
    {
        return 'extra_entity';
    }
}

ПРОБЛЕМА

Мне нужно заменить фиксированное значение 'foo' на настроенные $options['extra_property'].

Может ли кто-нибудь сказать мне, как я могу решить эту проблему, или если есть какой-то другой способ ее решения?

Теги:
forms

1 ответ

1
Лучший ответ

Вы можете нормализовать свой вариант choice_attr следующим образом:

$resolver->setNormalizers(array('choice_attr', function($options, $value) use ($propertyAccessor){
    $extraValue = $options['extra_property'];
    return function($choice, $key) use ($extraValue, $propertyAccessor){
         // now you have access the to $options['extra_property'], do what you want with it.
    }
}

Примечание. Я на самом деле не протестировал это, и он может сломаться, если symfony использует собственный Normalizer для опции choice_attr.

  • 0
    Я работаю с некоторыми изменениями, setNormalizers устарела в Symfony 2.7, и некоторые теги отсутствовали )); логика верна.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню