Я пытаюсь использовать Service Manager в классе сущности, но я не знаю, как это сделать.Лучший способ использования ServiceManager в классе модели?
Это легко на контроллере, потому что мы можем позвонить менеджеру сервиса с помощью: $ this-> getServiceLocator();
Но, в моем классе сущности, даже если я реализую ServiceLocatorAwareInterface я могу retieve ServiceManager, потому что мой класс сущности не звонить с менеджером службы:
Так что это лучший способ:
1 - Pass serviceManager в моем классе сущности из моего контроллера 2 - Использование ServiceManager для создания класса объектов 3 - ...?
Чтобы лучше понять мою проблему, что мой код, который не работает:
Мой объект класса:
class Demande extends ArraySerializable implements InputFilterAwareInterface {
/../
public function getUserTable() {
if (! $this->userTable) {
$sm = $this->getServiceLocator();//<== doesn't work !
$this->userTable = $sm->get ('Application\Model\UserTable');
}
return $this->userTable;
}
Очень полезный ответ! Еще одна причина не вводить ServiceManager в модель таким образом, что мы не можем сериализовать наш объект (из-за закрытия в ServiceManager). И поэтому мы не можем сохранять модели на сеансе. –
Единственное, что нужно добавить, я чувствую, что вы не должны чрезмерно использовать 'Closure' слишком много. Вместо этого напишите заводские классы. Это повысит общую производительность, поскольку классы будут создаваться только по требованию. Все Closures будут создаваться при каждом отдельном запросе. – Sam
Еще одна вещь: если некоторые зависимости абсолютно необходимы **, настоятельно рекомендуется использовать '__construct()' или инъекцию вместо Setter-Injection – Sam