我正在尝试创建一个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()?
Blade指令应该返回一个php将解释的字符串,如下所示:
Blade::directive('row', function($data)
{
return "<?php var_dump($data); ?>";
}
以下是秘密:
它不是pass by value
或pass by reference
,有点像pass by variable name
。
所以可以这样想:
当你打电话时:
@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代码将代替@rowblade指令插入到您的视图中。