Laravel Bind Object Interface с реализацией, в параметрах которой есть параметры переменных

Обратите внимание, что перед тем, как задавать вопросы, я изучил:

laravel-4 способ ввести объект, который требует настройки, в контроллер

Laravel 4: передача данных от производителя поставщику услуг

а также

Laravel 4: запутался в том, как использовать App :: make ()

Но я не вижу, чтобы они ответили на мой вопрос!

Модель предметной области:
У Сайта должен быть Владелец, и в настоящее время этот владелец относится к типу «Клиент», но в будущем может измениться на «Торговый посредник» или «Сотрудник» и т. Д., Поэтому я использую полиморфизм следующим образом:

Класс Сайт имеет Собственность Собственника.
Владелец интерфейса,
Customer — это класс, который реализует Owner,
У Клиента есть Имя и UID, поэтому они требуются в конструкторе Клиента.

Теперь я хочу связать реализацию Customer с интерфейсом Owner, чтобы при каждом вызове Owner я получал Customer.

Мы обычно делаем это:

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));
});}

Но в этом случае $ name и $ id в операторе USE не определены. У кого-нибудь есть идеи?

ОБНОВИТЬ:
Конструктор клиента выглядит следующим образом:

    /**
* 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);
}

Это будет инициализировано из Агрегированного корня (сайта). Правильные типы будут переданы ему.

0

Решение

Поскольку я не думаю, что можно передавать переменные, я решил удалить конструктор из Customer и установить его свойства с помощью пользовательских методов, чтобы теперь я мог сказать:

$ this-> owner-> setId (Идентификатор идентификатора). Поставщик услуг разрешит Владельцу свою реализацию Клиента.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]