首页 > 解决方案 > 从 Laravel 5.7 升级到 Laravel 5.8 后自定义刀片指令不起作用

问题描述

我在 Laravel 中有一些 Ziggyroutes 的自定义指令。在 Laravel 5.7 中它们工作得很好,现在我已经升级到 Laravel 5.8 并且它们停止工作了。如果我调用自定义指令,他们只会打印出纯文本。

我在一个干净的项目中尝试过它,它在那里工作。我已经用 view:clear、cache:clear 和 config:clear 清除了我的缓存

例如我有:

 \Blade::directive('routes', function($group = null){
            return "<?php echo app('" . BladeRouteGenerator::class . "')->generate({$group}); ?>";
        });

在 Blade 中,我这样称呼它:

 @routes()

给出一个纯文本说明的结果@routes()

所以我期望并且应该发生的事情是将包含所有路线的列表粘贴到刀片上。而此时发生的事情是它只是以纯文本形式打印它@routes()

那么这种行为可能是什么问题。从 Laravel 5.7 升级到 5.8,我错过了什么吗?

更新:显然这个包htmlmin破坏了整个问题的链接,所以在删除包后它又可以工作了。

标签: phplaravellaravel-bladelaravel-5.7laravel-5.8

解决方案


问题在这里 vendor/laravel/framework/src/Illuminate/Support/Facades/Blade.php:34

如果您从以前的版本更改此返回

return static::$app['view']->getEngineResolver()->resolve('blade')->getCompiler();

那么你必须查看:clear

自定义指令正在工作..但这不好......我认为问题出在别名 Blade.compiler 但我不知道在哪里。

有什么帮助吗?

更新:

你有2个选择。

第一个选项是composer remove htmlmin/htmlmin

或者

第二种选择是:

发布所有供应商资产

$ php artisan vendor:publish

这将创建一个config/htmlmin.php

编辑此配置并设置'blade' => false,


推荐阅读