Изменение строкового представления вариантов в форме Symfony 2.6

1

Я использую построение типа формы, использующего абонента поля формы для отображения некоторых полей формы.

Абонент возвращает параметры формы для данного поля. Один из вариантов - "выбор":

    $formOptions = [
        ...
        'choices' => $choices,
    ];

$choices - сущности.
Следовательно, они будут отображаться в форме с помощью объектов __toString().

Метод __toString() будет выглядеть примерно так:

public function __toString()
{
    return $this->getName();
}

Однако я хочу, чтобы представление "выбора" было $name. $id $name. $id (имя, связанное с идентификатором объекта).
В то же время я не хочу изменять __toString() потому что хочу другое строковое представление только в этом поле формы, а не во всей системе.

Какие у меня варианты?
У меня есть какой-либо подробный контроль над тем, как отображать поля формы Symofny?

  • 0
    Какую версию Symfony вы используете?
  • 0
    Выбор может быть заполнен функцией в хранилище объекта.
Показать ещё 1 комментарий
Теги:
forms
symfony-2.6

3 ответа

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

Вы можете использовать опцию property в соответствии с документацией по объекту 2.6

$builder->add('users', 'entity', array(
    'class' => 'AcmeHelloBundle:User',
    'property' => 'customToString',
));

Просто убедитесь, что имя свойства совпадает с именем метода

    /**
     * @return string 
     * Here you print the attributes you need
     */
    public function customToString()
    {
        return sprintf(
            '%s,
            $this->$name . $this->$id,


        );
    }
  • 0
    Это должен быть принятый ответ. Легко и приятно. Спасибо
4

Начиная с Symfony 2.7 вы можете использовать опцию choice_label с обратным вызовом для динамического создания ярлыков ваших вариантов:

$builder->add('name', 'choice', array(
    'choices' => ...,
    'choice_label' => function ($choice) {
        return $choice->name.$choice->id;
    },
));

В этом примере предполагается, что ваши варианты - объекты, которые имеют общедоступные свойства $id и $name.

  • 1
    Омг, я работаю над Symofny 2.6.9. Извините, что дезинформировал вас. Тем не менее, для версии 2.7 вы ответите, что наверняка решит проблему.
  • 0
    Супер отлично. Это должен быть принятый ответ, потому что в принятом, форма заставляет вас изменить сущность, что не имеет смысла
2

Вы можете попробовать что-то вроде этого? :

$formChoices = [];
foreach ($choices as $key => $entity) {
   $formChoices[$entity->getId()] = sprintf('%s %s', $entity->getName(), $entity->getId());
}

$formOptions = [
        ...
        'choices' => $formChoices,
    ];

Ещё вопросы

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