不确定是否可以,但是我想映射我的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表单,但是我需要要求用户选择至少一个个选项,据我所知,这是不可能的,因为两个单独的表格。
答案 0 :(得分:1)
不确定我是否正确理解了您的要求,所以让我改一下。
您可能希望在一种情况下将audience
字段设置为{{1}的employees
并将false
设置为students
,将true
设置为{{1} }和employees
到true
的另一种情况?
如果我是正确的话,这是可行的方法:
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;
}
}