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代码,因为它是由第三方供应商包处理的。我不能修改它。我已经给出了一个代码示例。希望对你有所帮助。恕我直言。工作完美无瑕。非常感谢。