Я хочу добавить атрибут для каждой опции 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']
.
Может ли кто-нибудь сказать мне, как я могу решить эту проблему, или если есть какой-то другой способ ее решения?
Вы можете нормализовать свой вариант 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
.
setNormalizers
устарела в Symfony 2.7, и некоторые теги отсутствовали));
логика верна.