Я использую Bolt 4 CMS, основанную на Symfony 5. В контроллере, который я написал, я хотел бы перечислить всех пользователей из моей базы данных, получить их адреса электронной почты и отправить им электронное письмо. Пока я просто пытаюсь получить адрес электронной почты из имени пользователя.
В этом примере https://symfony.com/doc/current/security/user_provider.html, он показывает, как создать собственный класс для работы с пользователями из базы данных:
// src/Repository/UserRepository.php
namespace App\Repository;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Symfony\Bridge\Doctrine\Security\User\UserLoaderInterface;
class UserRepository extends ServiceEntityRepository implements UserLoaderInterface
{
// ...
public function loadUserByUsername(string $usernameOrEmail)
{
$entityManager = $this->getEntityManager();
return $entityManager->createQuery(
'SELECT u
FROM App\Entity\User u
WHERE u.username = :query
OR u.email = :query'
)
->setParameter('query', $usernameOrEmail)
->getOneOrNullResult();
}
}
Затем в моем пользовательском контроллере я вызываю этот класс и функцию:
// src/Controller/LalalanEventController.php
namespace App\Controller;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use App\Repository\LalalanUserManager;
class LalalanEventController extends AbstractController
{
/**
* @Route("/new_event_email")
*/
private function sendEmail(MailerInterface $mailer)
{
$userManager = new LalalanUserManager();
$email = (new Email())
->from('[email protected]')
->to($userManager('nullname')->email)
->subject('Nice title')
->text('Sending emails is fun again!')
->html('<p>See Twig integration for better HTML integration!</p>');
$mailer->send($email);
}
}
К сожалению, в примере класс расширяется от ServiceEntityRepository
, что требует ManagerRegistry
для конструктора. Кто-нибудь знает, что я могу изменить, чтобы решить эту проблему?
Заранее спасибо!