Я пытаюсь создать метод для активации пользователей с помощью токена, но я немного растерялся из-за того, как я могу проверить, используя доктрину 2 и отношения.
Здесь вы можете увидеть экран моегоотношения с базой данных.
Это мой пользовательский объект
.............
/**
* @ORM\OneToOne(targetEntity="App\Entity\Token", mappedBy="username", cascade={"persist", "remove"})
*/
private $token;
public function getToken(): ?Token
{
return $this->token;
}
public function setToken(?Token $token): self
{
$this->token = $token;
// set (or unset) the owning side of the relation if necessary
$newUsername = $token === null ? null : $this;
if ($newUsername !== $token->getUsername()) {
$token->setUsername($newUsername);
}
return $this;
}
.............
Это мой токеновый объект
.............
/**
* @ORM\OneToOne(targetEntity="App\Entity\User", inversedBy="token", cascade={"persist", "remove"})
*/
private $username;
public function getUsername(): ?User
{
return $this->username;
}
public function setUsername(?User $username): self
{
$this->username = $username;
return $this;
}
.............
Приложение работает, как и ожидалось, когда я регистрирую любого пользователя, и электронное письмо отправлено.
В другом проекте без реализаций в токене (сохранение токена в той же таблице, что и у пользователя) у меня не было ни одногопроблема при создании метода, как показано ниже:
.............
/**
* @Route("/activation/{token}/", name="activation/", methods={"GET"}))
*/
public function activation(Request $request, User $user, $token)
{
$token = $request->attributes->get('token');
$update = $user->getToken();
$user->setToken(null);
$user->setActive(true);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->render(
'emails/confirmation.html.twig');
}
.............
Но с этим методом я получаю следующую ошибку Невозможно угадать, как получить экземпляр Doctrine из информации запроса для параметра.
Кто-нибудь есть идеи?
Спасибо за ваше время.
С уважением.
..............................
EDIT1: ОШИБКА: невозможно угадать, как получить экземпляр Doctrine из информации запроса fили параметр "токен".
КОД:
/**
* @Route("/activation/{pledge}/", name="activation/", methods={"GET"}))
*/
public function activation(Request $request, Token $token, $pledge)
{
$user = $pledge->getUsername();
if ( null === $user) {
}
$user->setToken(null);
$user->setActive(true);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($user);
$entityManager->flush();
return $this->render(' emails/confirmation.html.twig');
}
}
РЕДАКТИРОВАТЬ 2: РЕШЕНИЕ
/**
* @Route("/activation/{token}/", name="activation/", methods={"GET"}))
*/
public function activation(Request $request, Token $pledge, $token)
{
$token = $request->attributes->get('token');
$user = $pledge->getUsername();
if ( null === $pledge) {
}
$pledge->setToken(null);
$entityManager = $this->getDoctrine()->getManager();
$entityManager->persist($pledge);
$entityManager->flush();
return $this->render('emails/confirmation.html.twig');
}