Обратите внимание, что перед тем, как задавать вопросы, я изучил:
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);
}
Это будет инициализировано из Агрегированного корня (сайта). Правильные типы будут переданы ему.
Поскольку я не думаю, что можно передавать переменные, я решил удалить конструктор из Customer и установить его свойства с помощью пользовательских методов, чтобы теперь я мог сказать:
$ this-> owner-> setId (Идентификатор идентификатора). Поставщик услуг разрешит Владельцу свою реализацию Клиента.
Других решений пока нет …