【问题标题】:Laravel 5 Blade Custom Directive - trouble passing variableLaravel 5 Blade 自定义指令 - 传递变量的麻烦
【发布时间】:2016-04-05 19:58:47
【问题描述】:

我正在尝试创建一个 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() 但我不认为这是正确的...为什么这不将值传递给指令????
  • 我正在努力解决同样的问题,我只是无法将评估的字符串或变量传递给我的自定义 Blade 指令。看起来,按照设计,它只能在return 之后进行评估。不过,eval() 总是很危险的方法。

标签: php laravel-5 laravel-blade


【解决方案1】:

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

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

【讨论】:

  • 好的 - 我现在明白了。谢谢你。我会更新我的问题以更好地解释我在做什么。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 2020-06-03
    • 1970-01-01
    • 2020-10-16
    • 2018-10-05
    • 2019-02-19
    • 2013-07-08
    • 2021-04-04
    • 2015-05-27
    相关资源
    最近更新 更多