Список пользователей в Symfony 5 (Bolt 4)

Я использую 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 для конструктора. Кто-нибудь знает, что я могу изменить, чтобы решить эту проблему?

Заранее спасибо!


person S. Blanc    schedule 06.02.2021    source источник


Ответы (1)


Как сказано в документе,

Поставщики пользователей — это классы PHP, связанные с Symfony Security, которые выполняют две задачи:

  • Перезагрузить пользователя из сеанса
  • Загрузите пользователя для некоторой функции

Итак, если вы хотите получить только список пользователей, вам нужно просто получить UserRepository следующим образом:

    /**
     * @Route("/new_event_email")
     */
    private function sendEmail(MailerInterface $mailer)
    {
        $userRepository = $this->getDoctrine()->getRepository(User::class);

        $users = $userRepository->findAll();

        // Here you loop over the users
        foreach($users as $user) {
            /// Send email
        }
    }

Ссылка на доктрину: https://symfony.com/doc/current/doctrine.html

Вам также необходимо узнать больше об внедрении зависимостей здесь: https://symfony.com/doc/current/components/dependency_injection.html

person bechir    schedule 07.02.2021