Я просто обновляю свой ZF2 до V2.1.4, чтобы использовать метод init класса Zend \ Form для инъекции ServiceLocator в FieldSet, как объясняет Zend documentation.Zend Framework 2 Inject Service Manager в Fieldset
У меня есть в файлах Global.php и Module.php определения драйвера базы данных и службы, как также объясняется documentation. Эта услуга работает нормально во всех проектах.
Это мой Fieldset Код:
class UserFieldset extends Fieldset implements ServiceLocatorAwareInterface{
protected $serviceLocator;
public function setServiceLocator(ServiceLocatorInterface $sl) {
$this->serviceLocator = $sl;
}
public function getServiceLocator() {
return $this->serviceLocator;
}
public function init() {
var_dump($this->serviceLocator);
}
public function __construct() {
.........
}
}
Моя проблема является продолжением:
Внутри UserFieldset :: Init (метод), $ this-> ServiceLocator не экземпляр Zend \ ServiceManager \ ServiceManager, например, при получении службы с контроллера. Экземпляр Zend \ Form \ FormElementManager и использование var_dump, см., Что он не имеет сервиса моей настройки Zend.
Как я могу получить экземпляр Zend \ ServiceManager \ ServiceManager внутри поля, используя DI?
Пожалуйста, помогите мне.
Это решение уже рассматривалось, я хотел бы вводить без использования этого tecnique (как показано в документации Zend версии 2.1). – josepmra
@josepmra Вы вызываете форму самостоятельно из ServiceManager? Интерфейс есть, потому что, вероятно, где-то в ZF есть инициализатор, который будет вызывать геттер после построения. Но вам нужно вызвать форму из ServiceManager! Затем произойдет инъекция. – Sam