我在将参数传递给自定义指令时遇到问题 我写:
这是我通过的:@renderblocks($deviceType、$subBlocksIds、$allBlocks)
第一个只是一个字符串,第二个数字数组,第三个是 Eloquent 模型数组。
当我尝试很好地使用这些参数时,我遇到了一个问题:
Blade::directive('renderblocks', function ($expression) {
list($deviceType, $subBlocksIds, $allBlocks) = explode(', ', $expression);
dd($deviceType);
它打印这个 -> "$deviceType",就像这样,而不是变量持有的实际字符串。与其他参数相同,如何将参数传递给自定义刀片指令并在内部使用它们?
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
文件中的字符串,因为它们是作为字符串而不是实际变量发送的。
您可以使用发送到ServiceProvider
的variables
,Laravel会发挥其魔力并将返回的结果发送到视图。
例如。
Blade::directive('addAge', function ($age) {
$age= 999;
return "<?php echo {$age} ?>";
});
调用@addAge(1)
仍然显示999
,因为它在ServiceProvider
中已更改,即使它是作为字符串发送的