0

请注意,在提出这个问题之前,我已经调查过:

laravel-4 将需要配置的对象注入控制器的方法

Laravel 4:将数据从 make 传递给服务提供者

Laravel 4:对如何使用 App::make() 感到困惑

但我看不到他们回答了我的问题!

域模型:一个站点必须有一个所有者,目前这个所有者是客户类型,但将来可以更改为经销商或员工等。所以我使用多态性如下:

类站点有一个所有者属性。Owner 是一个接口,Customer 是一个实现 Owner 的类,Customer 有一个 Name 和一个 Uid,因此这些在 Customer 的构造函数中是必需的。

现在我想将 Customer 实现绑定到 Owner 接口,这样每当我调用 Owner 时,我都会得到一个客户。

我们通常会这样做:

class UseCustomerAsSiteOwnerServiceProvider extends ServiceProvider{

    public function register()
    {
        $this->app->bind('hidden\Domain\Model\Site\Owner', function ($app)
        {
            return $this->app->make(new Customer());
        });


    }

}

但是 Customer() 需要初始化 $id 和 $name 并且这些是变量对象 - 不是静态的,所以我不知道如何传递它们?

我试过这个:

public function register()
    {
        $this->app->bind('hidden\Domain\Model\Site\Owner', function ($app) use ($id, $name)
        {
            return $this->app->make(new Customer($id, $name));
        });


    }

但在这种情况下,USE 语句中的 $name 和 $id 没有定义。有人有想法吗?

更新:客户构造函数如下:

    /**
     * Initialise a new Customer
     *
     * @param Identifier $id
     * @param CustomerName $name
     */
    public function __construct(Identifier $id, $name)
    {
        $this->id       =       $this->setId($id);
        $this->name     =       $this->setName($name);
    }

这将从聚合根(站点)初始化。正确的类型将传递给它。

4

1 回答 1

0

因为我认为不可能传递变量,所以我决定从 Customer 中删除构造函数并使用自定义方法设置它的属性,这样现在我可以说:

$this->owner->setId(Identifier Id)。服务提供商将 Owner 解析为其 Customer 实现。

于 2015-04-07T13:39:45.543 回答