из списка (enum). Простой пример: пол (мужской / женский).
Сделать связь OneToMany? Муторно вроде как то ради этого заводить отдельную таблицу. Есть ещё варианты?
константы?
Не могу найти пример констант в Entity
чем обычная строка не подходит? Можете сделать Value Object с кастомным доктриновским типом — довольно типовая операция
private const GENDER_MALE = 'male';
Понятно, а как это привязать к свойству $gender? Как и советует Максим, пол прописать как строку?
нужно классическим неполиткорректным методом: мальчики - 1, девочки - 0))
просто сеттер геттер $entity->setGender($entity::GENDER_MALE)
я бы сеттер с константой заменил на набор методов male() / female() / etc или на сеттер с ВО, как предлагалось дальше
эти методы уже как синтаксический сахар к set/get gender
почему? они нужны как раз, чтоб не делать сеттер и не городить проверку на совпадение с константой
а если мы например захотим засетить значение через обычную форму? через choice
Проверка с константной будет скорее всего внутри VO но все равно будет
Трансформеры вроде для этого, но могу ошибаться
Для инкапсуляции
ну в форме вы можете делать что хотите, а обработчик формы уже вызовет нужный метод у энтити
ну вот внутри ВО ей и место. Сущность не должна отвечать за корректность создания гендера, она в окнтракте описывает, что ожидает Gender и все. Этим ВО и классные =)
Я про то, что все равно проверка на константу будет :)
необязательно, если сильно заморочиться, то можно обойтись подтипами Male extends Gender Female extends Gender TransMale extends Gender TransFemale extends Gender
Ну тут уже вопрос какой инвариант и как он поддерживается. Но в целом, наверное да. Можно просто делать $this->value = const
Псс парень, гендерно-нейтральный енум хочешь? https://github.com/grachevko/Enum/blob/master/src/Gender.php С регистрацией в доктрине из коробки
ммм толерантненько
А где гендер "вертолет апач"?
Выходит за рамки ISO/IEC 5218
Какая же жесть))) https://cs9.pikabu.ru/post_img/big/2017/06/11/9/149719056916291845.jpg
Обсуждают сегодня