Laravel通过引用事件订阅者传递数组

时间:2014-07-22 06:53:13

标签: php arrays events laravel pass-by-reference

是否可以通过引用将数组传递给事件订阅者?

我有一个事件" user.create.show"我想将一个数组传递给事件,以便我可以根据需要进行修改。

电话看起来像这样。

Event::fire('user.create.show', array($data));

事件订阅者看起来像这样。

public function createShow(&$data) 
{
    $data['foo'] = 'bar';
    return $data;
}

我得到一个"参数1到UserSubscriber :: createShow()期望是一个参考,给出的值" PHP错误。

导致错误的行如下:

return call_user_func_array($callable, $data);

我知道我可以返回它的值,但是如果将多个变量传递给事件,Laravel将返回一个包含变量的数组和一个多维数组。我可以解析返回值但是如果我可以通过引用传递它会使我的代码更清晰,更容易。

2 个答案:

答案 0 :(得分:1)

好吧,使用Event::fire('user.create.show', array($data));,您显然传递了一个值,因为您在调用中使用了数组构造函数。将其更改为以下内容:

$data = array($data);
Event::fire('user.create.show', $data);

另请注意notes heresolution of passing array by reference here

答案 1 :(得分:0)

这是我通过引用传递的方式:

    \Event::listen('foo', function(&$ref){
        $ref = 'bar';
    });

    $foo = 'foo';

    $args[] = &$foo;

    \Event::fire('foo', $args);

    echo $foo; // bar