Laravel 5 Blade Custom Directive - 麻烦传递变量

时间:2016-04-05 19:58:48

标签: php laravel-5 laravel-blade

我正在尝试创建一个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()?

2 个答案:

答案 0 :(得分:2)

Blade指令应该返回一个php将解释的字符串,如下所示:

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

答案 1 :(得分:0)

这是秘密:
它不是 pass by valuepass 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 刀片指令。