可以使用数据初始化Laravel IoC吗?

时间:2013-05-25 01:55:50

标签: php oop laravel

尝试将IoC用作工厂。我可以用?

传递数据来初始化/构造对象
App::bind('Song', function(){
    return new Song;
});

并模仿这个($ data永远不会传递,为什么?)

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

而班级是

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

App::make('Song',array('id'=>1,'name'=>'foo'))调用会跳过在Illuminate \ Container中插入我的参数 - 初始化的类不包含任何已定义的属性。

2 个答案:

答案 0 :(得分:1)

您可以使用'use'将数据传递给匿名函数:

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

答案 1 :(得分:0)

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

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

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

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