首页 > 解决方案 > 错误:您选择的值不是有效的选择

问题描述

 目前,我正在更新在现有 Symfony 2.3(当前为 3.0.9)上运行的系统,并且正在验证操作。我想将Form中选择的数据保存在数据库中,但是一些使用ChoiceType的数据由于以下原因无法保存The value you selected is not a valid choice.

 传过来的数据好像和更新到DB前的系统一样,但是好像被拒绝了。

似乎与错误有关的一件事是我替换了 services.yml 中参数中的数字和单词。

 这是因为页面上显示的是一个数字,尽管这个词应该显示出来。你能给我一些建议吗?

错误

shop_keepRequestMinRank => The value you selected is not a valid choice.
shop_prefId => The value you selected is not a valid choice.

代码 ShopController.php

if ($request-> isMethod('PUT')){
    if ($form->handleRequest($request)->isValid()){
        // save save
        $this->get("admin.shopService")->save($shop);
        $this->get('session')->getFlashBag()->add('success','Saved shop profile.');
        return $this->redirect($this->generateUrl ('ahi_sp_admin_shop_shop_edit'));
        } else {
            $this->get('session')->getFlashBag()->add('error','Could not save shop profile. Please check your entries.');
        }
    }
}

服务.yml

parameters:
#member rank
   amc_member_rank:
       "White": 0
       "Navy": 1
       "Orange": 2
       "Silver": 3
       "Black": 4

   prefectures:
       "Hokkaido": 1
       "Aomiriken": 2
 

参数.php

/ **
      * Get the prefecture's
      *
      * @return array Prefectures
      * /
     public static function getPrefectures()
     {
         return self::$container->getParameter("prefectures");
     }
      / **
      * Get the key of the prefecture
      *
      * @return array Prefectural key
      * /
     public static function getPrefecturesKeys ()
     {
         return array_keys(self::getPrefectures());
     }
/ **
      * Get AMC membership rank
      *
      * @return array AMC member rank
      * /
     public static function getAmcMemberRank()
     {
         return self::$container->getParameter("amc_member_rank");
     }

     / **
      * Get a key for membership rank
      *
      * @return array member rank key
      * /
     public static function getAmcMemberRankKeys()
     {
         return array_keys(self::getAmcMemberRank());
     }

ShopType.php

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

// The lowest rank that can be reserved
$builder->add("keepRequestMinRank", ChoiceType::class, array(
    'choices'=>Parameters::getParameter('amc_member_rank'),
    'expanded'=>false,
    'required'=>true,
));

版本 Cent OS 6.7 PHP 5.6 Symfony3.0.9

标签: phpsymfony

解决方案


在 Symfony 2.7 中,他们添加了choices_as_values 选项,因为现在提供给 ChoiceType 的数据是反向的(带有值的键)

为了向后兼容,您必须将choices_as_values 设置为false。从长远来看,您必须反转 ChoiceType 值的所有数据数组。

请参阅https://symfony.com/doc/2.7/reference/forms/types/choice.html#choices-as-values

额外建议:升级主要版本时,请从新版本中读取 UPGRADE.md 文件并检查重大更改 (BC)。此外,您应该首先升级到 symfony 2.8,因为这是一个专门用于从 symfony 2 过渡到 3 的版本,并首先修复所有弃用警告。


推荐阅读