Laravel 5刀片自定义指令-传递变量时出错


Laravel 5 Blade Custom Directive - trouble passing variable

我正在尝试创建一个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 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代码将代替@rowblade指令插入到您的视图中。