将参数传递给自定义指令



我在将参数传递给自定义指令时遇到问题 我写:

这是我通过的:@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文件中的字符串,因为它们是作为字符串而不是实际变量发送的。

您可以使用发送到ServiceProvidervariables,Laravel会发挥其魔力并将返回的结果发送到视图。

例如。

Blade::directive('addAge', function ($age) {
    $age= 999;
    return "<?php echo {$age} ?>";
});

调用@addAge(1)仍然显示999,因为它在ServiceProvider中已更改,即使它是作为字符串发送的

最新更新