0

试图将 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 中插入我的参数 - 初始化的类不包含任何已定义的属性。

4

2 回答 2

1

您可以使用“使用”将数据传递给匿名函数:

App::bind('Song', function() use ($data) {
    return new Song($data);
});
于 2013-05-25T02:03:47.093 回答
0

Define the Song object binding. $dynamicData can be any concrete object, array or primitive type.

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

Pass the dynamic data to the concrete object

$song = App::make('Song', ['name' => 'foo', 'type' => 'bar']);
于 2015-07-16T15:39:35.127 回答