首页 > 解决方案 > 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 项目中导入包时,我怎样才能让这个项目使用我的组件?不修改配置?

  1. 我是否必须覆盖应用程序的配置?
  2. 我必须从我的包中发布视图吗?
  3. 我必须使用主题吗?

我看到这个功能:loadComponentsFromMarkdown课堂上,但我该如何使用它?

标签: laravel

解决方案


好的,现在我使用一个超级类,它似乎工作:

<?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),
        ];
    }
}

推荐阅读