我们如何覆盖第三方模块/组件的邮件视图文件?
让我们假设一个模块正在使用以下代码发送电子邮件:
Yii::$app->mailer->compose([
'html' => '@myvendor/mymodule/mail/email-html',
'text' => '@myvendor/mymodule/mail/email-text',
])
->setTo([$email => $name])
->setSubject('Hi');
->send();
我们将如何覆盖这些单独的电子邮件视图@myvendor/mymodule/mail/email-html
和@myvendor/mymodule/mail/email-text
?
答案 0 :(得分:0)
在模块的邮件文件中配置并重写 $ viewPath 属性。
示例:
public $viewPath = '@myvendor/mymodule/mail';
首先,创建新的html和文本文件。创建两个文件。 创建两个文件。
mail / trxt / NewTEXT
$mailer = Yii::$app->mailer;
$mailer->viewPath = $this->viewPath;
$mailer->getView()->theme = Yii::$app->view->theme;
return $mailer->compose(['html' => $view, 'text' => 'text/' . $view], $params)
->setTo($to)
->setFrom($this->sender)
->setSubject($subject)
->send();
如果只想更改路径: 在代码前使用:
Yii :: $ app-> mailer-> viewPath = '@ myvendor / newPath';
Yii::$app->mailer->compose([ #code...
如果是VIEW文件:只需更改HTML和TEXT文件的名称,(两者)
更新:
可以覆盖它,也可以通过一个组件...
//new file: path\widgets\Mailer.php
namespace path\widgets;
use yourpath\Mailer as DefaultMailer; //path:mymodule/mail
class Mailer extends DefaultMailer{
public $viewPath = '@myvendor/mymodule/mail';
public function changeviewPath($_path){
$this->viewPath; = $_path;
}
}
//使用。变化
use path\widgets\Maile; // New path
// Use before the usual code
$mailer->changeviewPath('newpath\mail');
更改组件中文件的地址。取决于您的电子邮件模块,它会有所不同
示例:
'modules' => [
'myMudul' => [
'class' => 'PathModule\Module',
'mailer' => [
#code ..
],
],
...