我正在使用Laravel 7开发一个软件包,在这个软件包中,我将收到电子邮件。
我想使用降价电子邮件,所以我发布了视图:
php artisan vendor:publish --tag=laravel-mail
我希望这些视图嵌入到我的包中,所以我只是/resources/views/vendor/mail
复制到/package/packageAuthor/packageName/resources/views/vendor/mail
。
但是,如何让我的应用程序加载包的组件?
我知道我可以编辑配置mail.php
:
'markdown' => [
'theme' => 'default',
'paths' => [
base_path('package/packageAuthor/packageName/resources/views/vendor/mail'),
],
],
但是当我想在其他Laravel项目中导入软件包时,我如何使这个项目使用我的组件?
- 我必须覆盖应用程序的配置吗?
- 我必须从我的包中发布视图吗?
- 我必须使用主题吗?
我看到这个函数:loadComponentsFrom
在Markdown
类中,但我如何使用它?
好吧,现在我使用一个超级类,它似乎有效:
<?php
namespace LpaCommonIlluminate;
use IlluminateContainerContainer;
use IlluminateMailMailable;
use IlluminateMailMarkdown;
class MailableLpa extends Mailable
{
/**
* Override buildMarkdownView() to define new components path
*
* @return array
*
* @throws ReflectionException
* @throws IlluminateContractsContainerBindingResolutionException
*/
protected function buildMarkdownView()
{
/** @var Markdown $markdown */
$markdown = Container::getInstance()->make(Markdown::class);
// use package resources path
$markdown->loadComponentsFrom([
__DIR__. '/../../resources/views/vendor/mail'
]);
$data = $this->buildViewData();
return [
'html' => $markdown->render($this->markdown, $data),
'text' => $this->buildMarkdownText($markdown, $data),
];
}
}