Arhn - архитектура программирования

Адрес в почтовом ящике, заданный [Doctrine\ORM\Query_state], не соответствует RFC 2822, 3.6.2.

Я разрабатываю блог под symfony и для отправки писем использую swiftMailer.

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

Мой контроллер:

/**
 * @Route("/admin/ajout")
 * @param  Request $request
 * @return Response
 * @throws \Exception
 */

 public function add(Request $request, \Swift_Mailer $mailer): Response {

    $article = new Articles();
    $addArticle = $this->createForm(ArticlesType::class, $article);
    $addArticle->handleRequest($request);

    $info = $this->getDoctrine()->getRepository(InfoMore::class)->findByInfo(2);

     $em    = $this->get('doctrine.orm.entity_manager');
     $dql   = "SELECT email FROM App:user";
     $query = $em->createQuery($dql);

    if($addArticle->isSubmitted() && $addArticle->isValid()) {

        $article = $addArticle->getData();
        $manager = $this->getDoctrine()->getManager();
        $manager->persist($article);
        $manager->flush();

        $message = (new \Swift_Message('Un nouvelles articles est publier'))
            ->setFrom('[email protected]')
            ->setTo($query)
            ->setBody(
                $this->renderView(
                    'email/article_publish.html.twig'
                ),
                'text/html'
            )
        ;
        $mailer->send($message);

        $this->addFlash('article', 'L\'article a bien étais ajouter');
        return $this->redirectToRoute('app_backoffice_admin');
    }

    return $this->render('backOffice/CRUD/add.html.twig', [
        'title' => 'Ajouter un article a votre blog',
        'info' => $info,
        'addArticle' => $addArticle->createView()
    ]);

 } 

и ошибка сообщения:

Адрес в почтовом ящике, заданный [Doctrine\ORM\Query_state], не соответствует RFC 2822, 3.6.2.

Он говорит мне, что адрес недействителен, и в этом случае как добавить несколько адресов электронной почты?

Спасибо за помощь!

28.06.2018

  • Вы используете только $query = $em->createQuery($dql); вы пропустите ->getResult(). 28.06.2018
  • Когда я добавляю getResult(), я получаю следующее сообщение об ошибке: [Syntax Error] строка 0, col -1: Error: Expected Doctrine\ORM\Query\Lexer::T_IDENTIFIER, получил конец строки 28.06.2018
  • если у вас есть решение, я беру, пожалуйста, я должен вернуть свой проект завтра, и это единственный сценарий, который мне не хватает! спасибо ! 28.06.2018
  • Не связанный с вопросом, но вы можете проверить свое французское правописание 28.06.2018
  • Это означает, что с вашим запросом что-то не так, посмотрите здесь symfony.com/doc/current/doctrine.html#querying-with-dql-or-sql 28.06.2018
  • Попробуйте это, возможно, это сработает: $dql = SELECT u.email FROM App\Entity\User u; 28.06.2018

Ответы:


1

Предполагая, что ваша сущность пользователя находится в App\Entity\User, вы можете выбрать это:

$emails = $em
    ->createQuery('SELECT u.email FROM App\Entity\User u')
    ->getResult()
;

Это вернет массив адресов электронной почты от ваших пользователей. Затем вы просто передаете это своему методу setTo():

$message = (new \Swift_Message('Un nouvelles articles est publier'))
    ->setFrom('[email protected]')
    ->setTo($emails)
    // ...
;

См. Доктрину Примеры DQL SELECT для получения дополнительной помощи. Если вы хотите быть немного более изобретательным, вы можете добавить имя пользователя к его адресу электронной почты и отправить его. Предположим, у вас есть функция getName() в вашей сущности пользователя. Вместо этого вы можете создать свои адреса электронной почты следующим образом:

$emails = [];
$users = $this->getDoctrine()->getRepository(User::class)->findAll();

foreach ($users as $user) {
    $emails[$user->getEmail()] = $user->getName();
}

Затем, когда вы позвоните ->setTo($emails), у него будет и его имя, и адрес электронной почты.

Последнее замечание: я бы использовал $em = $this->getDoctrine()->getManager();, а не $this->get('doctrine.orm.entity_manager');.

28.06.2018
  • Спасибоооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо это работает !! 29.06.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..