使用变量从奏鸣曲管理员发送自定义电子邮件

Send a custom email from sonata admin using variables

我在 sonata admin 中有一个列表视图。我想添加一个列,允许我单击 link 发送电子邮件。 link 操作将知道 table 中该行的变量,以便它可以填写电子邮件。我能够添加列并且可以可视化树枝模板。我已将以下功能添加到管理员 Class:

 public function sendEmail( \Swift_Mailer $mailer)
    {
        $message = (new \Swift_Message('some email'))
            ->setFrom('contact@example.com')
            ->setTo('contact@example.com')
            ->setBody(
                $this->renderView(
                    'emails/response.html.twig',
                    array('manufacturer' => $manuvalue, 'modelnum' => $modelnumvalue, 'email' => $email)
                ),
                'text/html');

        $mailer->send($message);

    }

我不知道如何将这些部分连接在一起,这样当我单击 link 时,电子邮件就会发送并包含行中的参数。我有电子邮件处理网站其他区域的表单提交,但需要帮助找出手动执行此操作的方法。

正如您在评论中提到的,您想要做的通常是 Custom Action

为了确保此操作无法通过直接请求访问并且只能由管理员执行,您可以为您的自定义操作使用这样的模板:

...
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
...

//AuthorizationCheckerInterface injected as authorizationChecker

public function customAction($id){
    $object = $this->admin->getSubject();
    if (!$object) {
        throw new NotFoundHttpException(sprintf('unable to find the object with id: %s', $id));
    }

    // Check access with role of your choice
    $access = $this->authorizationChecker->isGranted('ROLE_ADMIN');
    if($access){

    //Do your action

    } else {
        throw $this->createAccessDeniedException("You don't have the rights to do that!");
    }
}

我最终做了一条自定义路由,并使用@dirk 提到的安全设置对其进行了保护。