【问题标题】:Custom blade directive not working since upgrade from Laravel 5.7 to Laravel 5.8从 Laravel 5.7 升级到 Laravel 5.8 后自定义刀片指令不起作用
【发布时间】:2025-12-10 19:35:02
【问题描述】:

我在 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 破坏了整个东西 link to issue 所以在删除包后它再次工作。

【问题讨论】:

  • 这对我有用。您是否将指令代码添加到您的AppServiceProvider,如laravel.com/docs/5.8/blade#extending-blade 所示?
  • @BramVerstraten 好吧,它位于一个单独的 ServiceProvider 中,它扩展了 ServiceProvider,然后加载到 app.php 中。我试图将它直接放在 AppServiceProvider 中,因为文档是这样说的。但是还是不行。

标签: php laravel laravel-blade laravel-5.7 laravel-5.8


【解决方案1】:

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

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

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

那么你必须查看:清除

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

有什么帮助吗?

更新:

你有两个选择。

第一个选项是composer remove htmlmin/htmlmin

第二个选项是:

发布所有供应商资产

$ php artisan vendor:publish

这将创建一个config/htmlmin.php

编辑此配置并设置'blade' =&gt; false,

【讨论】:

  • 您好 Erik Selecky,感谢您的回答。对于我的问题,是包htmlmin 毁了这一切。删除后一切都恢复正常。