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 代码,它利用该变量并可以在以后进行评估。
我正在使用 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 代码,它利用该变量并可以在以后进行评估。