Laravel Blade 指令添加额外的引号
Posted
技术标签:
【中文标题】Laravel Blade 指令添加额外的引号【英文标题】:Laravel Blade directive adding extra quotes 【发布时间】:2020-11-16 10:27:45 【问题描述】:我使用的是 Laravel 7,所以我认为这不会成为问题。
只是关于我的安装说明,它是从 5.3 升级而来的。
我的问题在于我创建的自定义 Blade 指令。 它在输入周围添加了额外的引号
我添加了一个 dd() 来查看为什么我的 Helper 不起作用。
我的服务提供者
Blade::directive('setting', function ($expression)
dd($expression);
return SettingHelper::value($expression);
);
查看文件
@setting('theme_public')
dd() 的输出
"'theme_public'"
预期输出
'theme_public'
我不知道为什么要添加额外的引号。
【问题讨论】:
在 ServiceProvider 中尝试return $expression;
。可能是您在 SettingHelper 中的问题。
【参考方案1】:
你是对的,我在安装新的 laravel 7 时得到了相同的行为。
我创建了一些小测试,看看发生了什么。我认为最好这样解释这种行为。想象一下,您正在使用一个变量调用视图:
return view('welcome', ['var' => "Hallo"]);
你有一个像这样的自定义刀片指令:
Blade::directive('dirtest', function ($expression)
dd($expression);
);
如果你在模板中使用它,输出是这样的:
@dirtest($var)
// output of dd in the browser:
"$var"
所以刀片指令似乎只是为了用更冗长的 php 代码替换一些速记指令。实际代码稍后在刀片模板引擎中执行。这是有道理的,因为刀片模板也被缓存以加快执行速度。在自定义指令已经嵌入的缓存版本中,您的自定义函数不再被触发。我希望这个解释对你有意义。
这对你意味着什么
这真的取决于您的用例。如果你有一个自定义指令,它只传递常量字符串,你可能只需要写就可以了:
@setting(theme_public)
但如果有一点点机会,你可能会不时传入一个变量,比如
@setting($theme)
您确实必须返回代码,该代码利用该变量并且可以在以后进行评估。
【讨论】:
谢谢。我想我明白你的意思。由于该指令只需要一个静态字符串,我将使用if ( Str::startsWith($expression, '"') || Str::startsWith($expression, "'") ) ...
转义引号 - 我现在就是这样做的,但认为有一个错误。
如果你有一个静态字符串,只需这样做@setting(theme_public),这会给你一个 dd($expression) 作为“theme_public”以上是关于Laravel Blade 指令添加额外的引号的主要内容,如果未能解决你的问题,请参考以下文章
5 个非常有用的 Laravel Blade 指令,你用过哪些?