Laravel 5 Blade自定义指令 - 传递变量时出现问题

5

我正在尝试创建一个Blade指令,根据传入的内容在表格行上设置类。问题在于,当我调用它时,变量的值没有被传递进去——而是传递了我在括号内写的字面字符串。

我的视图中:

@row($inspection->inspection_disposition)

在指令中:
 Blade::directive('row', function($data)
    {
        var_dump($data);
           .
           .
           .
     }

我在转储中看到的是:

string(37) "($inspection->inspection_disposition)"

我不应该看到该变量的值吗?这就是我想要的。我错过了什么吗?

更多信息:

我需要在指令中使用该变量的值,类似于这样:

if($data == "hello")
{
   return something
}
elseif($data == "goodbye")
{
   return something else
}

这只是一个简化的例子,希望能帮助说明我需要比较指令内部变量的值,然后确定要做什么。也许我需要使用eval()函数?


我一直在尝试使用eval(),但我觉得那样不对...为什么这个值没有传递到指令中???? - Kenny
我正在为同样的问题苦苦挣扎,我就是无法将计算后的字符串或变量传递给我的自定义 Blade 指令。看起来,按设计,它只能在 return 之后进行计算。然而,使用 eval() 总是很危险的方法。 - Vitalij
2个回答

3

Blade指令应该返回一个字符串,PHP将解释它,例如:

Blade::directive('row', function($data)
{
    return "<?php var_dump($data); ?>";
}

好的,我现在明白了。谢谢你。我会更新我的问题以更好地解释我的操作。 - Kenny

0

这是秘密:
它不是 按值传递 或者 按引用传递,而是有点像 按变量名传递

所以可以这样想:
当你调用:

@row($data)

想象一下,你正在调用:

$row('$data')   /* Don't actually do this */

这是因为 Laravel 的本质处理方式。它会获取你传递的变量名称,并将它们插入到返回给视图的 PHP 代码中。

就像 @RDev 的回答一样,在 app\Providers\AppServiceProvider.php 文件的 boot() 函数中添加以下内容:

Blade::directive('row', function($parameter)
{
    return "<?php var_dump($parameter); ?>";
}

$data变量将保留你传递的文字值"$data"。然后,它会将其插入到 PHP 代码中,就像这样:

<?php var_dump($data); ?>

然后,该PHP代码将插入到您的视图中,取代@row刀片指令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接