Правильно ли обращаться к диспетчеру сущностей в классе сущностей (чтобы не было дублирующегося имени пользователя) - PullRequest
1 голос
/ 04 декабря 2011

Я хочу, чтобы при проверке моей сущности не было дубликатов имени пользователя

/**
 * @var string $name
 *
 * @ORM\Column(name="name", type="string", length=32)
 * @Assert\NotBlank();
 * @Assert\Callback(methods={"isUniqueUsername"})
 */
private $name;

Полагаю, мне нужно использовать обратный вызов Validator.Тогда мне придется запросить базу данных для пользователей с таким именем, поэтому мне нужен менеджер сущностей?Как мне получить к нему доступ?И получить к нему доступ "правильно"?Вместо этого я использую класс валидатора?Кажется, довольно сложно создать класс только для проверки 1 поля?

Ответы [ 2 ]

5 голосов
/ 04 декабря 2011

В symfony2 есть уникальный валидатор, который вы можете использовать для обеспечения уникальности имени пользователя, адреса электронной почты или любого другого поля. При использовании аннотаций это работает так:

use Symfony\Bridge\Doctrine\Validator\Constraints as Unique;

/**
 * @ORM\Entity
 * @ORM\Table
 * @Unique\UniqueEntity(fields={"email"},message="Your email is already registered")
 */
class User{
  // ...
}

При попытке добавить пользователя через форму вы должны получить сообщение, указанное в уникальной аннотации.

4 голосов
/ 04 декабря 2011

Вы не должны использовать менеджер сущностей изнутри сущности - это нарушает разделение проблем.Ваш класс сущности - это POPO (обычный старый объект PHP), который должен просто описывать сущность - он не должен отвечать за что-либо связанное с постоянством.Если вам нужно выполнить пользовательский запрос, сделайте это либо из класса репозитория, либо из отдельной службы.Класс репозитория уже имеет доступ к менеджеру сущностей.Если вы используете пользовательский сервис, просто добавьте в него менеджер сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...