我发送了一封电子邮件,到目前为止,我有这段代码:
\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
在视图中不可用。
答案 0 :(得分:0)
您是否使用相同的布局和视图文件进行设置?为什么这样它们分别用于视图和布局文件,这两个文件都不能相同。
如果您使用yii2-advanced-app
,则您的邮件views
和layouts
应该进入 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);你将获得变量值**