Laravel Blade compileString 给我一个空白页

Laravel Blade compileString gives me a Blank Page

我试图在我的 AppServiceProvider 中创建一个新的 blade 指令:

<?php
public function boot()
{
  Blade::directive('test', function () {
    return Blade::compileString('@if(1==1) test @endif');
  });
}

然后在我看来调用这个指令:

@test()

但是它不起作用,给我一个空白页。

我尝试了几件事,但最后我通过将 BladeCompiler.php 中的 blade 指令代码复制并粘贴到我的自定义指令而不是使用 compileString

来解决这个问题

您得到一个空白页面,因为 Blade::compileString 是有状态单例对象的外观。该对象不希望您调用它。

作为解决方法,您可以创建一个新的编译器实例并使用它:

Blade::directive('endtabs', function ($exp) {
    $content1 = sprintf("@include('%s', ['tabs' => $tabs])", 'backend/tabs/test');
    $compiler = new BladeCompiler(app('files'), app('config')['view.compiled']);
    return $compiler->compileString($content1);
});