用常量数组填充 ChoiceType

HKa*_*lla 5 symfony-forms symfony

使用底层实体中定义的常量数组填充 Symfony 表单 choiceType 并添加基于相同常量创建断言的最佳方法是什么。\n选项名称应存储在数据库中。

\n\n

我正在使用 Symfony 2.8,这就是我所做的。它运作良好,但我认为必须有一种更简单的方法来处理所有新的表单功能。

\n\n

谢谢,汉内斯

\n\n

实体

\n\n\n\n
class User implements UserInterface, \\Serializable\n{\n    const OCCUPATION_SCHOOL_HIGHER_DEGREE = \'Sch\xc3\xbclerin/Sch\xc3\xbcler an Gymnasium\';\n    const OCCUPATION_SCHOOL_LOWER_DEGREE = \'Sch\xc3\xbclerin/Sch\xc3\xbcler an Haupt-/Real- und anderen Schulen\';\n    const OCCUPATION_WORK_TRAINING = \'Berufsausbildung\';\n    const OCCUPATION_UNIVERSITY = \'Studium an einer Hochschule\';\n    const OCCUPATION_WORK_FULLTIME = \'Vollzeiterwerbst\xc3\xa4tigkeit\';\n    const OCCUPATION_WORK_PARTTIME = \'Teilzeiterwerbst\xc3\xa4tigkeit\';\n    const OCCUPATION_NATIONAL_SERVICE = \'Wehrdienst/Zivildienst/FSJ/F\xc3\x96J\';\n    const OCCUPATION_UNEMPLOYED = \'keine Besch\xc3\xa4ftigung\';\n    const OCCUPATION_OTHERS = \'sonstiges\';\n\n...\n/**\n     * @ORM\\Column(type="string", length=255, nullable=true)\n     * @Assert\\NotBlank(message = "Pflichtfeld.")\n     * @Assert\\Choice(\n     *      choices = {\n     *          User::OCCUPATION_SCHOOL_HIGHER_DEGREE,\n     *          User::OCCUPATION_SCHOOL_LOWER_DEGREE,\n     *          User::OCCUPATION_WORK_TRAINING,\n     *          User::OCCUPATION_UNIVERSITY,\n     *          User::OCCUPATION_WORK_FULLTIME,\n     *          User::OCCUPATION_WORK_PARTTIME,\n     *          User::OCCUPATION_NATIONAL_SERVICE,\n     *          User::OCCUPATION_UNEMPLOYED,\n     *          User::OCCUPATION_OTHERS,\n     *      },\n     *      message = "Bitte w\xc3\xa4hle einen Eintrag aus der Liste."\n     * )\n     */\n    private $occupation;\n\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n

表单类型

\n\n\n\n
class UserRegisterType extends AbstractType\n{\n    /**\n     * @param FormBuilderInterface $builder\n     * @param array                $options\n     */\n    public function buildForm(FormBuilderInterface $builder, array $options)\n    {\n        // Occupation\n        $builder->add(\'occupation\', ChoiceType::class, array(\n                \'label\' => \'Besch\xc3\xa4ftigung*\',\n                \'placeholder\' => \'Bitte w\xc3\xa4hlen\',\n                \'choices\' => array(\n                    User::OCCUPATION_SCHOOL_HIGHER_DEGREE => User::OCCUPATION_SCHOOL_HIGHER_DEGREE,\n                    User::OCCUPATION_SCHOOL_LOWER_DEGREE => User::OCCUPATION_SCHOOL_LOWER_DEGREE,\n                    User::OCCUPATION_WORK_TRAINING => User::OCCUPATION_WORK_TRAINING,\n                    User::OCCUPATION_UNIVERSITY => User::OCCUPATION_UNIVERSITY,\n                    User::OCCUPATION_WORK_FULLTIME => User::OCCUPATION_WORK_FULLTIME,\n                    User::OCCUPATION_WORK_PARTTIME => User::OCCUPATION_WORK_PARTTIME,\n                    User::OCCUPATION_NATIONAL_SERVICE => User::OCCUPATION_NATIONAL_SERVICE,\n                    User::OCCUPATION_UNEMPLOYED => User::OCCUPATION_UNEMPLOYED,\n                    User::OCCUPATION_OTHERS => User::OCCUPATION_OTHERS,\n                ),\n                \'choices_as_values\' => true,\n            )\n        );\n
Run Code Online (Sandbox Code Playgroud)\n\n

...\n}\n

\n

Adr*_*n G 2

几个月前我发现了这个捆绑包,我认为它可以满足您的需求。

您将可能的值存储在您的中config.yml(您可以使用您的类常量)。然后,您可以使用专用表单类型来检索您的选择并在实体中添加验证约束。