Laravel将基元绑定到数组

时间:2017-01-19 10:16:57

标签: php laravel

根据Laravel 5文档:

$this->app->when('App\Http\Controllers\UserController')
          ->needs('$variableName')
          ->give($value);

允许您将单个值绑定到控制器。

我希望多个服务提供程序绑定到相同的$ variableName,但是不是第二个提供程序覆盖第一个提供程序的值,是否可以自动将这两个值存储在数组中?

例如:

提供者1:

$this->app->when('App\Http\Controllers\UserController')
          ->needs('$variableName')
          ->give('Value 1');

Provider2之间:

$this->app->when('App\Http\Controllers\UserController')
          ->needs('$variableName')
          ->give('Value 2');

然后,在UserController中,

我希望结果如下:

var_dump($variableName)['Value 1', 'Value 2']

这可能吗?如果没有,是否有针对我要实现的目标的解决方法?

1 个答案:

答案 0 :(得分:1)

解决问题的一种方法是使用taggable方法;例如,在一个提供商中,您可能想要提供有关用户的一些信息:

$this->app->bind('UserActivity', function(){
    //whatever you need to do  
});

然后,在另一个提供商中,您需要了解其他内容:

$this->app->bind('UserOrders', function() {
    //again, whatever you need to do
});

现在在FinalImplementationProvider(我们将执行的最后一个提供程序,用于汇总我们以前实例化的容器提供程序中的所有数据),我们可以标记所有这些:

$this->app->tag(['UserOrders', 'UserActivity'], 'userVariables');

最后,我们可以汇总所有这些数据并将其传递给UserVariableRepository

$this->app->bind('UserVariableRepository', function($app) {
    return new UserVariableRepository($app->tagged('userVariables'));
});

现在,您可以从任何地方使用UserVariableRepository,并且可以访问您在整个应用程序中在提供程序实例中设置的所有变量。