Symfony3: соответствие изменения значения ключа в типе выбора

#php #symfony

#php #symfony

Вопрос:

Я обновляю Symfony.
Когда я обновился до Symfony3, все «Состояние». Имена, отображаемые в форме, изменены на числа.
Все значения состояния задаются в services.yml. Путем изменения значения yml отображение в браузере было восстановлено, но когда я попытался сохранить значение, выбранное в раскрывающемся списке в форме, система работает для сохранения числа вместо «Состояния».
Есть ли какое-нибудь хорошее решение? Кроме того, я не хочу использовать «choices_as_value«, потому что он не будет использоваться в будущем.

Код
Тип

         $builder->add("prefId", ChoiceType::class, array(
            "required" => true,
            "choices" => Parameters::getParameter("state"),
        ));
 

services.yml

     state:
      //Symfoyn 2
        1: "Alabama"
      //Symfony 3
        "Alabama": 1
 

Версия
Symfony3.0.9 PHP 5.6

Комментарии:

1. Одним из наиболее забавных перерывов в Symfony Form BC было решение изменить порядок ключей / значений для массивов выбора. Всегда было немного загадкой, почему. Существует опция, которую вы можете использовать, чтобы изменить ее обратно, хотя я забыл, что это такое. Вероятно, вам просто нужно настроить параметры::getParameter, чтобы изменить порядок или, возможно, использовать array_flip в качестве обходного пути.

2. Если вы еще этого не сделали, возможно, вам захочется ознакомиться с тем, что Symfony называет блогом Living on the Edge . Большинство изменений и улучшений обычно описаны где-нибудь в этом блоге. Иногда может быть немного сложно найти конкретную статью, но может быть полезно просто просмотреть заголовки. Не хочу быть слишком обескураживающим, но если вы планируете довести это приложение до современных стандартов, то вам предстоит пройти долгий путь.

3. @Cerad Спасибо за ваш комментарий. Благодаря вашим советам я смог решить проблему. Кроме того, спасибо, что сообщили мне полезный URL.

Ответ №1:

Я решил проблему, изменив array_keys в Parameter.php чтобы array_reverse . Благодаря Cerad.

     //Parameter.php
   /**
     * 
     *
     * @return array 
     */
    public static function getState()
    {
        return self::$container->getParameter("state");
    }

    /**
     * 
     *
     * @return array 
     */
    public static function getStateKeys()
    {
        //return array_keys(self::getState());
        return array_reverse(self::getState());
    }