我在将参数传递给我写的自定义指令时遇到了问题:
这是我通过的: @renderblocks($ deviceType,$ subBlocksIds,$ allBlocks)
首先是一个字符串,第二个数字数组,第三个是Eloquent模型数组。
当我尝试使用这些参数时,我遇到了一个问题:
Blade::directive('renderblocks', function ($expression) {
list($deviceType, $subBlocksIds, $allBlocks) = explode(', ', $expression);
dd($deviceType);
它打印这个 - > " $设备类型"就像那样,而不是变量所持有的实际字符串。对于其他参数,我如何将参数传递给自定义刀片指令并在其中使用?
答案 0 :(得分:0)
Blade会将所有内容转换为php tags
并将其替换为您调用directive
的文件。您正在尝试查看AppServiceProvider
中对variable
一无所知的变量内容,但只将其视为字符串。
在视图中调用renderblocks
会将其替换为您从函数返回的内容。例如
Blade::directive('renderblocks', function ($expression) {
list($deviceType, $subBlocksIds, $allBlocks) = explode(', ', $expression);
return "<?php echo {$deviceType} ?>";
});
将renderblocks
的每次通话替换为<?php echo $deviceType ?>
。这不会显示任何错误或显示为字符串,因为该文件中存在变量$deviceType
。但是你在ServiceProvider
文件中看到它是一个字符串,因为它们是作为字符串发送的,而不是真正的变量。
您可以使用发送到variables
的{{1}},并且laravel将发挥其魔力并将返回的结果发送到视图。
例如
ServiceProvider
调用Blade::directive('addAge', function ($age) {
$age= 999;
return "<?php echo {$age} ?>";
});
仍会显示@addAge(1)
,因为它已在999
中更改,即使它是以字符串形式发送的