Yii2:覆盖第三方邮件视图
如何覆盖第三方模块/组件的邮件视图文件 假设模块使用以下代码发送电子邮件:Yii2:覆盖第三方邮件视图,yii2,yii2-extension,yii2-module,Yii2,Yii2 Extension,Yii2 Module,如何覆盖第三方模块/组件的邮件视图文件 假设模块使用以下代码发送电子邮件: Yii::$app->mailer->compose([ 'html' => '@myvendor/mymodule/mail/email-html', 'text' => '@myvendor/mymodule/mail/email-text', ]) ->setTo([$email => $name]) ->setSubject('Hi')
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这些单独的电子邮件视图?在模块的邮件文件中配置并重写$viewPath属性
例如:
public $viewPath = '@myvendor/mymodule/mail';
'modules' => [
'myMudul' => [
'class' => 'PathModule\Module',
'mailer' => [
#code ..
],
],
...
首先,创建新的html和文本文件。创建两个文件。
创建两个文件
邮件/newHTML
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();
如果只想更改一个的路径:
在代码之前使用:
如果查看文件:只需要更改HTML和文本文件的名称,两者都可以
更新:
它可以被覆盖或通过组件和
//供使用。变化
use path\widgets\Maile; // New path
// Use before the usual code
$mailer->changeviewPath('newpath\mail');
更改组件中文件的地址。根据您的电子邮件模块,它会有所不同
例如:
public $viewPath = '@myvendor/mymodule/mail';
'modules' => [
'myMudul' => [
'class' => 'PathModule\Module',
'mailer' => [
#code ..
],
],
...
您可以在配置中覆盖这两个别名:
'aliases' => [
'@myvendor/mymodule/mail/email-html' => '@app/views/mail/email-html',
'@myvendor/mymodule/mail/email-text' => '@app/views/mail/email-text',
],
这将覆盖模块的所有邮件视图文件。我只想覆盖那些特定的代码。我不能使用before代码,因为它是由第三方供应商包处理的。我不能修改它。我已经给出了一个代码示例。希望对你有所帮助。恕我直言。工作完美无瑕。非常感谢。