Laravel 缓存视图中的 PHP League Commonmark $environment 错误

问题描述

将 Laravel 项目升级PHP8 后,我经常收到此错误

Passing an $environment into the "League\commonmark\commonmarkConverter" constructor is deprecated in 1.6 and will not be supported in 2.0; use MarkdownConverter instead

堆栈跟踪显示它是由缓存视图文件中的这一行触发的:

<?PHP echo e(Illuminate\Mail\Markdown::parse($slot)); ?>

我已多次删除所有缓存视图(我认为其中可能有一些旧的缓存视图),但这并没有解决问题。

不确定这是否应该是报告的错误,因为这可能是在 Laravel 框架中修复的,但在升级PHP8 之前,我从未遇到过此错误,因此我认为与此有关。

解决方法

我也很喜欢这个。我一直在对 Markdown 文件进行更改,但它们从未出现过 - 几乎就像 Laravel 指向错误的地方一样。它是...

正在开发升级的 Laravel 应用程序(即,我从 5.x 开始并随着时间的推移进行了升级),因此存在两个潜在问题。

首先,在 ip/config/mail.php 中:您可能必须实际创建降价路径。如果您在降价之前发布了邮件,则整个降价邮件设置都将丢失。你可以从 git repo 中提取它们,或者为了方便从这里提取:

'markdown' => [
    'theme' => 'default','paths' => [
        resource_path('views/vendor/mail'),],

第二个潜在问题(尽管在您的情况下不太可能)如果您之前发布了这些邮件文件,HTML 目录中的 Laravel 布局文件具有 or 运算符,这会阻塞。将这三个运算符更改为 ??

也许这会对你有所帮助,这取决于你从哪里开始:)

,

您收到的错误应该是在 league/commonmark 的 1.6.0 版中添加的静默弃用错误。不幸的是,有一个错误导致它成为“用户通知”而不是弃用通知。将 league/commonmark 升级到 1.6.2 where this was fixed 可能会解决该问题。

如果您在升级后仍然收到错误消息(并确保 PHP 的 opcache 已被清除),很可能是 Laravel 或您的代码中的其他内容捕获并报告了此无声错误 - 这是一件好事,因为我们希望人们要知道此功能已弃用并将被删除,但它不应该是垃圾邮件日志,因此请仔细检查 Laravel 或 PHP 中与错误日志、错误级别和日志相关的任何设置。

来源:我是 league/commonmark 的维护者。

,

最终结果是我在 Laravel Forge 上将 PHP 版本设置为 8,但在我用于部署的 Laravel Envoyer 上没有设置...希望这对有相同设置的人有所帮助!