Symfony ChoiceType表单将选择映射到相关实体字段

时间:2019-03-20 22:38:18

标签: php symfony symfony-forms

不确定是否可以,但是我想映射我的ChoiceType的两个选择,每个选择都形成两个不同的template<typename T, class... Types> inline bool operator==(const T& t, const std::variant<Types...>& v) { const T* c = std::get_if<T>(&v); if(c) return *c == t; else return false; } template<typename T, class... Types> inline bool operator==(const std::variant<Types...>& v, const T& t) { return t == v; } 字段。

这是我制作的Announcement中的ChoiceType

EditAnnouncementType

这是我希望表单为现有->add('audience', ChoiceType::class, [ 'choices' => [ 'Students: anybody with a student level field populated' => 'students', 'Employees: anybody with an employee ID number' => 'employees' ], 'expanded' => true, 'required' => true, 'multiple' => true ]) 实体自动更新的两个字段。

Announcement

我使用的是两个单独的CheckBoxType表单,但是我需要要求用户选择至少一个个选项,据我所知,这是不可能的,因为两个单独的表格。

1 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了您的要求,所以让我改一下。
您可能希望在一种情况下将audience字段设置为{{1}的employees并将false设置为students,将true设置为{{1} }和employeestrue的另一种情况?

如果我是正确的话,这是可行的方法:

students

您的false类应该已经可以正确处理此问题。
但是可以通过使用类常量进一步改进

class Announcement
{
    public const AUDIENCE_EMPLOYEES = 'employees';
    public const AUDIENCE_STUDENTS = 'students';

    public function getAudience(): array
    {
        $audience = [];

        if($this->employees()) { 
            $audience[] = self::AUDIENCE_EMPLOYEES;
        }
        if($this->employees()) { 
            $audience[] = self::AUDIENCE_STUDENTS;
        }

        return $audience;
    }

    public function setAudience(array $audience): Announcement
    {
        $this->employees = in_array(self::AUDIENCE_EMPLOYEES, $audience);
        $this->students = in_array(self::AUDIENCE_STUDENTS, $audience);

        return $this;
    }
}