Здравствуйте, хочу разобраться в одном вопросе на примере следующего кода. Есть у меня контроллер в котором происходит создание пользователя:
/**
* @Route("/users", name="user_create", methods={"POST"})
*/
public function createUser(Request $request)
{
$login = $request->get('login');
$password = $request->get('password');
$user = new User();
$user->setLogin($login);
$user->setPassword($password);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
$user_id = $user->getId();
return $user_id;
}
Здесь User() - это стандартный entity.
Мне нужно проверять, занят ли данный логин или нет, и проверять это нужно при создании юзера и при редактировании(юзер может менять логин, вот такая хотелка). Т е совершенно логично запихнуть проверку в setLogin()
Но как это сделать? Как в entity получить доступ к бд?
Я так понимаю, если этого нельзя сделать стандартными средствами без пляски с бубном - значит я делаю говнокод.
А как по другому, может проверять в контроллере? Тогда при редактировании юзера придется копипастить кусок кода...
Хотелось бы сделать как то так:
namespace App\Entity;
class User
{
/**
* @ORM\Column(type="string", length=100)
*/
private $login;
/**
* @ORM\Column(type="string", length=100)
*/
private $password;
public function setLogin(string $login): self
{
$user = MagicGetDoctrine()->getRepository(User::class)->findByLogin($login);
if ($user) {
if ($this->id != $user->getId()) {
throw new Exceptions\UserLoginIsBusyException();
}
}
$this->login = $login;
return $this;
}
}
Как бы вы эту проверку сделали?