Laravel Blade 指令添加额外的引号

Laravel Blade directive adding extra quotes

我正在使用 Laravel 7,所以我认为这不会成为问题。

请注意我的安装,它是从 5.3 升级而来的。

我的问题是我创建的自定义 Blade 指令。 在输入

周围添加了额外的引号

我添加了一个 dd() 来查看为什么我的助手没有工作。

我的服务提供商

    Blade::directive('setting', function ($expression) {
        dd($expression);
        return SettingHelper::value($expression);
    });

查看文件

@setting('theme_public')

dd() 的输出

"'theme_public'"

预期输出

'theme_public'

我不知道为什么要添加额外的引号。

你说得对,我在全新 laravel 7 安装后得到了相同的行为。

我创建了一些小测试,看看发生了什么。我认为最好这样解释这种行为。假设您正在调用一个带有一个变量的视图:

return view('welcome', ['var' => "Hallo"]);

您有一个像这样的自定义 blade 指令:

Blade::directive('dirtest', function ($expression) {
    dd($expression);
});

如果您在模板中使用它,输出是这样的:

@dirtest($var)
// output of dd in the browser:
"$var"

所以 blade 指令似乎只是为了用更冗长的 php 代码替换一些 shorthand 指令。稍后在 blade 模板引擎中执行实际代码。这是有道理的,因为 blade 模板也被缓存以加快执行速度。在已嵌入自定义指令的缓存版本中,您的自定义函数不再被触发。我希望这个解释对你有意义。

这对你意味着什么

这真的取决于您的用例。如果你有一个自定义指令,它只传递常量字符串,你可能只写:

@setting(theme_public)

但如果有一点机会,你可能会时不时地传入一个变量,比如

@setting($theme)

您确实需要 return 代码,它利用该变量并可以在以后进行评估。