将参数传递给自定义指令

时间:2017-10-21 21:33:19

标签: laravel laravel-5 laravel-5.3

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

这是我通过的: @renderblocks($ deviceType,$ subBlocksIds,$ allBlocks)

首先是一个字符串,第二个数字数组,第三个是Eloquent模型数组。

当我尝试使用这些参数时,我遇到了一个问题:

    Blade::directive('renderblocks', function ($expression) {
        list($deviceType, $subBlocksIds, $allBlocks) = explode(', ', $expression);
        dd($deviceType);

它打印这个 - > " $设备类型"就像那样,而不是变量所持有的实际字符串。对于其他参数,我如何将参数传递给自定义刀片指令并在其中使用?

1 个答案:

答案 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中更改,即使它是以字符串形式发送的