Laravel 更新后无法看到现有供应商 class

Laravel can't see existing vendor class after update

更新到 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) }}

vendor 文件中 Markdown.php

use League\CommonMark\Environment;

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

查看 League\CommonMark\Environment,我发现 class(我的 IDE 也是):

final class Environment implements EnvironmentInterface, ConfigurableEnvironmentInterface { }

我无法理解为什么 Laravel 无法看到其供应商之一 classes。

有人能帮忙吗?

运行 以下内容可重新生成需要包含在项目中的所有 类 的列表。

php artisan clear-compiled -o
composer dump-autoload

如果仍然无法正常工作,也许可以尝试重新安装软件包。

composer require league/commonmark

您从 Laravel 的哪个版本升级? Laravel 6.7?

事实证明,这是对 v6.10 的 Laravel 版本进行重大(略有破坏)更改的结果。

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

我的特殊问题非常奇怪,但除了反馈给 Laravel 的那些之外,其他地方也有人报告过它。它在我的服务器中不一致,但完全重建(流浪者)解决了这个问题。

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