Как лучше всего вставить ограничение проверки составного ключа в конструктор форм, привязанное к объекту FOSUserBundle
User
?
Позвольте мне уточнить.
У меня есть сущность User
, которая расширяет FOSUserBundle\Model\User
. Я добавил несколько полей (в частности, поле team
). Каждый User
принадлежит ровно одному Team
.
Теперь я хочу создать систему регистрации, которая позволит пользователю напрямую стать членом одной конкретной команды (имея такой маршрут, как /register/{teamSlug}
). Новый пользователь должен ввести свой адрес электронной почты, но адрес электронной почты должен быть уникальным только на уровне команды. Это ограничение преобразуется в UNIQUE KEY team_email (team_id, email)
в выбранной базе данных.
Естественно, у меня будет уникальный ключ, определенный в таблице базы данных, но это только гарантирует, что никакие данные не будут вставлены, при этом будет выдано исключение базы данных при попытке недопустимой записи.
Я рассматривал возможность использования атрибута @UniqueEntity
для объекта User
, но, похоже, он не работает:
(Редактировать: я добавил отсутствующий оператор use
.)
use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* @ORM\Entity
* @ORM\Table(name="user")
* @UniqueEntity(
* fields={"email", "team"},
* message="This email already exists in this team."
* )
*/
class User extends BaseUser
{
// ...
}
Еще я нашел утверждение обратного вызова. Возможно, я мог бы использовать его, чтобы проверить, существует ли электронная почта в области действия команды, когда выполняется проверка экземпляра FormBuilder с data_class из MyBundle\Entity\User
, однако это нарушит инкапсуляцию Entity, поскольку требует, чтобы Entity знала о своем собственном репозитории и так далее.
Как лучше всего это сделать?