我正在尝试创建一个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()?
答案 0 :(得分:2)
Blade指令应该返回一个php将解释的字符串,如下所示:
Blade::directive('row', function($data)
{
return "<?php var_dump($data); ?>";
}
答案 1 :(得分:0)
这是秘密:
它不是 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 代码将被插入到您的视图中以代替 @row 刀片指令。