Sonata admin / swiftmailer如何从列表中收回信息

时间:2017-07-07 09:31:52

标签: php symfony sonata-admin swiftmailer

我目前正在尝试在我的项目中使用swiftmailer。我目前正在处理Sonata Admin,我想知道如何检索列表中显示的对象,以便能够检索相关的邮件地址,从而向该列表中包含的所有地址发送电子邮件。我想浏览一下sonata显示的列表,因为他们的过滤系统工作得非常好,我会用它来选择我想发送电子邮件的人。我在symfony文档中看到可以以这种形式将邮件发送到地址表:

$to = array('one@example.com', 'two@example.com', 'three@example.com');

$message = (new \Swift_Message('Hello Email'))
    ->setFrom('send@example.com')
            ->setTo(array($to))
            ->setBody('html content goes here', 'text/html');

$mailer->send($message);

但我不知道如何从列表中收回对象。 从这个网格。

grid 你能帮帮我吗?

Ps: 我只想在列表中放一个按钮,向列表中显示的所有人发送电子邮件。

非常感谢。

编辑: 我还在搜索,我发现sql请求就像是' t0.id'和' c0.id'。 t0和c0是对象的名称?总是这样吗? t0和c0有什么区别?

1 个答案:

答案 0 :(得分:1)

您可以通过向管理员列表添加操作来执行此操作         为此,首先在YourAdminBundle\Controller文件夹中创建一个新类,扩展Sonata\AdminBundle\Controller\CRUDController

您的自定义操作可能如下所示:

  /** @property YourAdminClass $admin */
        public function batchActionSendMail(ProxyQueryInterface $selectedModelQuery ,$type = 'sendMails') {

       if (false === $this->admin->isGranted('EDIT')) {
             throw new AccessDeniedException();
        }

           /* selected objects in your list !! */
            $selectedModels = $selectedModelQuery->execute();

            try{
             foreach ($selectedModels as $selectedModel){
              // your code to retrieve objects mails here (for instance)
                }
               //code to send your mails

                }
               catch(\Exception $e)
                {
                  $this->addFlash('sonata_flash_error', "error");
                }
                 $this->addFlash('sonata_flash_success', 'mails sent')  

         return new RedirectResponse($this->admin->generateUrl('list'));
            }  

要使此自定义CRUD控制器处于活动状态,请转到services.yml,转到类管理块,并通过引用自定义CRUD控制器完成arguments属性的第三个参数:

arguments: [null, YourBundle\Entity\YourEntity,YourAdminBundle:CustomCRUD]

最后,要允许您使用自定义操作,请转到管理员类并添加此功能:

public function getBatchActions()
    {
       if ($this->hasRoute('edit')) {

                $actions['sendMails'] = array(
                    'label'            => $this->trans('batch.sendMails.action'),
                    'ask_confirmation' => true, // by default always true
                );
            }
      return $actions;  
    }

此操作将显示在管理列表底部的下拉列表中,旁边是"全选"复选框。