gpt4 book ai didi

Laravel Blade 指令添加额外的引号

转载 作者:行者123 更新时间:2023-12-05 07:03:49 25 4
gpt4 key购买 nike

我使用的是 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 安装中得到了相同的行为。

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

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

你有一个像这样的自定义 Blade 指令:

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

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

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

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

这对您意味着什么

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

@setting(theme_public)

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

@setting($theme)

您确实必须返回使用该变量的代码,并且可以在以后进行评估。

关于Laravel Blade 指令添加额外的引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63109423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com