我目前正在尝试在我的项目中使用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);
但我不知道如何从列表中收回对象。 从这个网格。
Ps: 我只想在列表中放一个按钮,向列表中显示的所有人发送电子邮件。
非常感谢。
编辑: 我还在搜索,我发现sql请求就像是' t0.id'和' c0.id'。 t0和c0是对象的名称?总是这样吗? t0和c0有什么区别?
答案 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;
}
此操作将显示在管理列表底部的下拉列表中,旁边是"全选"复选框。