yii 如何在控制器中呈现邮件下的视图?

bfhwhh0e  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(169)

我想发送最新的招标列表给我的订阅者。视图位于common/mail/layout下,视图名称为tenderlist.php。我在前端有控制器,称为SiteController,我在Site文件夹下有视图,名称为tenderlist.php。这里的代码工作正常,并给出招标列表,现在我想使用swiftmailer向多个用户发送招标,结果,我复制这页tenderlist.php到邮件/布局文件夹.这电子邮件配置是正确的,但我不能发送这tenderlist给用户
如果tenderlist.php是纯html代码,即静态数据,则此操作工作正常并发送到电子邮件。

Yii::$app->mailer->compose(['html' => 'layouts/tenderlist'])

但如果投标列表查询来自数据库,则会出现错误:这是tenderlist.php的视图代码
//查看邮件/layouts下的tenderlist.php页面

<?php foreach ($etender as $post): ?>
<div class="panel panel-default">

      <a href="detail?id=<?=html::encode($post['id'])?> "> <?=html::encode($post['bidtitle'])?> </a>  </div> 
<?php endforeach; ?>

//在我的网站控制器actionTenderlist()中

return $this->render('@common/mail/layout/tenderlist', [
                                    'etender'=>$tenders,       ]);

//当我运行这个时,它给出错误

Undefined variable: etender
eit6fx6z

eit6fx6z1#

首先你需要做什么:高级Yii 2 app,common/config/main-local.php

'components' => [
    //...
    'mailer' => [
       'viewPath' => '@common/mail',
    ],
    //...
]

您的发送邮件功能:

Yii::$app
        ->mailer
        ->compose(
            [
                'html' => 'template-html', //or any sub folder of yor template like "templates/orders/template-html" located in common/mail
                'text' => 'template-text',
            ],
            [
                //any vars like
                'user' => $this->user,
            ]
        )
        ->setFrom([Yii::$app->params['appEmail'] => Yii::$app->name])
        ->setTo($this->user->email)
        ->setSubject($title)
        ->send()

希望能有所帮助。
在将数据传递给邮件模板之前,还要确保你访问了数据(或者你检查了数据是否存在)。如果有任何错误发生,还要检查你的'frontend/runtime/log/app.log'。
感谢穆罕默德·奥默阿斯拉姆

相关问题