Laravel 更新后看不到现有的供应商类

标签 laravel laravel-6 thephpleague

更新到 v6.10、6.11 后,我无法再从 Laravel 应用程序发送电子邮件。我没有更改任何代码,最近也没有要求或删除 Composer 中的任何新内容。这似乎可能是 Laravel 新版本的问题,因为这段代码在 v6.7 及更低版本上可以正常运行并发送电子邮件。

错误消息:

Class 'League\CommonMark\Environment' not found (View: /home/ww/app/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php)

{"exception":"[object] (Facade\Ignition\Exceptions\ViewException(code: 0): Class 'League\CommonMark\Environment' not found (View: /home/ww/app/vendor/laravel/framework/src/Illuminate/Mail/resources/views/html/footer.blade.php) at /home/videocyp/app/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php:103)

导致问题的供应商文件中的页脚行:

{{ Illuminate\Mail\Markdown::parse($slot) }}

供应商文件Markdown.php

use League\CommonMark\Environment;

 class Markdown
 { 
    public static function parse($text)
    {
       $environment = Environment::createCommonMarkEnvironment();
       // etc...
 }

查看League\CommonMark\Environment,我找到了该类(就像我的 IDE 一样):

final class Environment implements EnvironmentInterface, ConfigurableEnvironmentInterface { }

我无法理解为什么 Laravel 无法看到它的供应商类之一。

有谁能帮忙吗?

最佳答案

事实证明,这是从 v6.10 开始对 Laravel 构建进行重大(稍微破坏性)更改的结果。

由于潜在的 XSS 漏洞,他们似乎将根解析器更改为 League CommonMark。由于在新的 CommonMark 解析器中对多余的空白进行不同的解析,这会导致现有电子邮件发布模板出现其他问题。已报告错误 here , here , here .

我的特殊问题非常奇怪,但除了向 Laravel 报告的问题之外,其他地方也报告了该问题。我的服务器之间的情况不一致,但完全重建(vagrant)解决了这个问题。

对于之前发布的电子邮件模板显示原始 HTML 的其他人,如果幸运且未对模板进行任何更改,重新发布可能会解决问题。

关于Laravel 更新后看不到现有的供应商类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743551/

相关文章:

linux - httpd 没有按预期读取conf/httpd.conf 中的文档根目录

php - docker 上带有 Nginx、php 7.4 fpm 和 mysql 8 的 Laravel 6 比 php 7.1 上的 Laravel 4 慢

php - Laravel 将第一个 Bootstrap 横幅设置为“事件”

没有 oAuth 的 Laravel Passport

php - json 资源和资源集合有什么区别?在 Laravel

php - 捕获传入的请求数据

php - 指导我使用 phpleague 库实现 Oauth2 PHP 服务器

php - 不推荐将声明复制为 header ,并将从 v4.0 中删除 - Laravel Passport Problem in lcobucci/jwt 包

php - 使用 Laravel 连接查询

php - 在 laravel 5 app.php 中使用 autoload psr-4 定义的命名空间给出未找到的错误