Yii2:使用电子邮件的自定义视图

时间:2018-03-10 22:53:52

标签: php yii2

我发送了一封电子邮件,到目前为止,我有这段代码:

\Yii::$app->mailer->htmlLayout = "layouts/create-user";
$message = \Yii::$app->mailer->compose ( 'layouts/create-user' , [ 'userData' => 'Hello' ] );
$message->setFrom ( [ 'sdfsdfsdfs234s@mail.com' => 'Admin DOC-Plus' ] );
$message->setTo ( 'don****km@inbox.ru' );
$message->setSubject ( 'Your account has been created' );
$message->send ();

不知何故,我的变量$userdata在视图中不可用。

2 个答案:

答案 0 :(得分:0)

您是否使用相同的布局和视图文件进行设置?为什么这样它们分别用于视图和布局文件,这两个文件都不能相同。

如果您使用yii2-advanced-app,则您的邮件viewslayouts应该进入 common/mail/layouts common/mail/views 目录,如果yii2-basic,则应进入 app/mail/layouts 。我将在下面的示例中使用basic-app目录结构。

如果您没有html.php,请在app/mail/layouts内添加以下布局文件 app/mail/views ,并在views内移动您的视图{1}}文件夹(如果不存在)。

<?php
use yii\helpers\Html;

/* @var $this \yii\web\View view component instance */
/* @var $message \yii\mail\MessageInterface the message being composed */
/* @var $content string main view render result */
?>
<?php $this->beginPage() ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=<?= Yii::$app->charset ?>" />
    <title><?= Html::encode($this->title) ?></title>
    <?php $this->head() ?>
</head>
<body>
    <?php $this->beginBody() ?>
    <?= $content ?>
    <?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>

然后,您应该查看MailerInterface内{strong> compose() 的文档,view参数定义为

  

用于呈现邮件正文的视图。这可以是:

     
      
  • 一个字符串,表示用于呈现电子邮件的HTML正文的视图名称或路径别名。在这种情况下,文本正文将是   通过将strip_tags()应用于HTML正文生成。
  •   
  • 包含html和/或text元素的数组。 html元素引用用于呈现HTML正文的视图名称或路径别名,   而text元素用于呈现文本正文。例如,   ['html' => 'contact-html', 'text' => 'contact-text']
  •   
  • null,表示将在没有正文内容的情况下返回消息实例。
  •   

因此,请将您的代码更改为以下内容我假设名为myView的视图文件会相应更改

function sendMail() {

    \Yii::$app->mailer->htmlLayout = "@app/mail/layouts/html";

    $message = \Yii::$app->mailer->compose ( [ 'html' => '@app/mail/views/myView' ] ,['userData' => 'Hello'] // pass model to view);
    $message->setFrom ( [ 'sdfsdfsdfs234s@mail.com' => 'Admin DOC-Plus' ] );
    $message->setTo ( 'don****km@inbox.ru' );
    $message->setSubject ( 'Your account has been created' );
    $message->send ();
}

答案 1 :(得分:0)

如果查看文件路径如@ app / mail / layouts / create-user则请尝试此代码

$message = \Yii::$app->mailer->compose ('create-user',[ 'userData' => 'Hello' ] );
$message->setFrom ( [ 'sdfsdfsdfs234s@mail.com' => 'Admin DOC-Plus' ] );
$message->setTo ( 'don****km@inbox.ru' );
$message->setSubject ( 'Your account has been created' );
$message->send ();

**在视图文件文件中print_r($ userData);你将获得变量值**