laravel - Laravel - 更改包的降价组件路径
问题描述
我正在使用 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 Lpa\Common\Illuminate;
use Illuminate\Container\Container;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Markdown;
class MailableLpa extends Mailable
{
/**
* Override buildMarkdownView() to define new components path
*
* @return array
*
* @throws \ReflectionException
* @throws \Illuminate\Contracts\Container\BindingResolutionException
*/
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),
];
}
}
推荐阅读
- r - 如何为已经用 R 编码的 BA、MA、PhD 的人添加分类变量、大学
- html - 尝试使用 jQuery 创建汉堡菜单
- c# - 如何在 F# 中返回实现 IAsyncActionFilter 的任务?
- java - 插页式关闭显示前一个屏幕 1 - 2 秒,然后导航到第二个屏幕 (Android)
- mysql - 选择mysql信息
- typescript - Typescript 根据类属性(来自 .filter、.find 等)缩小类型
- r - 无法使用 R sweave 编译 pdf。乳胶错误:找不到文件“ae.sty”
- mysql - 返回逗号分隔值的where子句中的Mysql子查询
- java - 有什么方法可以更改 JavaFX ImageView 中的背景图像颜色?
- flutter - 删除特定小部件 | 颤振和Riverpod