可以用数据初始化Laravel IoC


Possible to initialize Laravel IoC with data?

试图将IoC用作工厂。我可以传递数据来初始化/构造对象吗?

App::bind('Song', function(){
    return new Song;
});

和模拟这个($data永远不会被传递,为什么?)

App::bind('Song', function($data=null){
    return new Song($data);
});

而Class为

class Song extends Eloquent {
    protected $fillable = array(
        'id',
        'name',
        'type'
    );
}

App::make('Song',array('id'=>1,'name'=>'foo'))调用跳过在照亮'容器内插入我的参数-初始化的类不包含任何定义的属性。

您可以使用'use':

将数据传递给匿名函数:
App::bind('Song', function() use ($data) {
    return new Song($data);
});

定义Song对象绑定。$dynamicData可以是任何具体对象、数组或基本类型。

App::bind('Song', function($app, $dynamicData){
    return new Song($dynamicData);
});

将动态数据传递给具体对象

$song = App::make('Song', ['name' => 'foo', 'type' => 'bar']);