首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -包装的减价部件的更改路径

Laravel -包装的减价部件的更改路径
EN

Stack Overflow用户
提问于 2020-06-21 11:16:43
回答 1查看 656关注 0票数 1

我正在开发一个使用Laravel 7的软件包,在这个包中我将有电子邮件。

我想使用降价电子邮件,所以我发表了以下观点:

代码语言:javascript
复制
php artisan vendor:publish --tag=laravel-mail

我希望这些视图嵌入到我的包中,所以我只需将/resources/views/vendor/mail复制到/package/packageAuthor/packageName/resources/views/vendor/mail

但是我怎样才能让我的应用程序为我的包加载组件呢?

我知道我可以编辑配置mail.php

代码语言:javascript
复制
'markdown' => [
    'theme' => 'default',

    'paths' => [
        base_path('package/packageAuthor/packageName/resources/views/vendor/mail'),
    ],
],

但是当我想在其他Laravel中导入这个包时,我如何使这个项目使用我的组件呢?而不修改配置?

  1. ,我必须重写应用程序的配置吗?
  2. ,我必须发布包中的视图吗?
  3. ,我必须使用主题吗?

我看到了这个函数:loadComponentsFromMarkdown类中,但是如何使用它呢?

EN

回答 1

Stack Overflow用户

发布于 2020-06-21 11:56:15

好的,现在我使用了一个超类,它看起来很管用:

代码语言:javascript
复制
<?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),
        ];
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62497744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档