symfony - 用常量数组填充 ChoiceType

标签 symfony symfony-forms

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

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

谢谢,汉内斯

实体

class User implements UserInterface, \Serializable
{
    const OCCUPATION_SCHOOL_HIGHER_DEGREE = 'Schülerin/Schüler an Gymnasium';
    const OCCUPATION_SCHOOL_LOWER_DEGREE = 'Schülerin/Schüler an Haupt-/Real- und anderen Schulen';
    const OCCUPATION_WORK_TRAINING = 'Berufsausbildung';
    const OCCUPATION_UNIVERSITY = 'Studium an einer Hochschule';
    const OCCUPATION_WORK_FULLTIME = 'Vollzeiterwerbstätigkeit';
    const OCCUPATION_WORK_PARTTIME = 'Teilzeiterwerbstätigkeit';
    const OCCUPATION_NATIONAL_SERVICE = 'Wehrdienst/Zivildienst/FSJ/FÖJ';
    const OCCUPATION_UNEMPLOYED = 'keine Beschäftigung';
    const OCCUPATION_OTHERS = 'sonstiges';

...
/**
     * @ORM\Column(type="string", length=255, nullable=true)
     * @Assert\NotBlank(message = "Pflichtfeld.")
     * @Assert\Choice(
     *      choices = {
     *          User::OCCUPATION_SCHOOL_HIGHER_DEGREE,
     *          User::OCCUPATION_SCHOOL_LOWER_DEGREE,
     *          User::OCCUPATION_WORK_TRAINING,
     *          User::OCCUPATION_UNIVERSITY,
     *          User::OCCUPATION_WORK_FULLTIME,
     *          User::OCCUPATION_WORK_PARTTIME,
     *          User::OCCUPATION_NATIONAL_SERVICE,
     *          User::OCCUPATION_UNEMPLOYED,
     *          User::OCCUPATION_OTHERS,
     *      },
     *      message = "Bitte wähle einen Eintrag aus der Liste."
     * )
     */
    private $occupation;

...
}

表单类型

class UserRegisterType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        // Occupation
        $builder->add('occupation', ChoiceType::class, array(
                'label' => 'Beschäftigung*',
                'placeholder' => 'Bitte wählen',
                'choices' => array(
                    User::OCCUPATION_SCHOOL_HIGHER_DEGREE => User::OCCUPATION_SCHOOL_HIGHER_DEGREE,
                    User::OCCUPATION_SCHOOL_LOWER_DEGREE => User::OCCUPATION_SCHOOL_LOWER_DEGREE,
                    User::OCCUPATION_WORK_TRAINING => User::OCCUPATION_WORK_TRAINING,
                    User::OCCUPATION_UNIVERSITY => User::OCCUPATION_UNIVERSITY,
                    User::OCCUPATION_WORK_FULLTIME => User::OCCUPATION_WORK_FULLTIME,
                    User::OCCUPATION_WORK_PARTTIME => User::OCCUPATION_WORK_PARTTIME,
                    User::OCCUPATION_NATIONAL_SERVICE => User::OCCUPATION_NATIONAL_SERVICE,
                    User::OCCUPATION_UNEMPLOYED => User::OCCUPATION_UNEMPLOYED,
                    User::OCCUPATION_OTHERS => User::OCCUPATION_OTHERS,
                ),
                'choices_as_values' => true,
            )
        );

... }

最佳答案

我找到了这个bundle几个月前,我认为它可以满足您的需求。

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

关于symfony - 用常量数组填充 ChoiceType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37000267/

相关文章:

php - 扩展 Sonata User Bundle 并添加新字段

authentication - 在早期阶段使用 Symfony2 开发时关闭防火墙?

symfony - 在Symfony 2中使用Twig路径功能创建带有 anchor 的链接

php - Symfony 2 创建具有 2 个属性的实体表单字段

php - 使用 AJAX 的 Symfony 4 验证器

unit-testing - Symfony2 单元测试中的模拟 Controller

rest - 如何使用 Symfony2 Forms 和 REST 修补集合?

Symfony2 注册表单 - 使用 jQuery 额外创建的字段不会保留在数据库中,仅来自上次输入的值

symfony - 如何在奏鸣曲管理员的默认 "delete"形式中删除 "Edit"按钮?

php - 交响乐 2 : Save referer for form and redirect to it referer on submit