предположение: Event\Service\EventService – мой личный объект, который работает с объектами Event\Entity\Event 
Этот код работает в ActionController:
 $eventService = $this->getServiceLocator()->get('Event\Service\EventService'); 
  Как я могу получить $eventService в форме Zend\Form\Form же? 
  У вас есть два варианта, если у вас такая зависимость.  В вашем случае Form зависит от Service .  Первый вариант заключается в том, чтобы вводить зависимости : 
 class Form { protected $service; public function setService(Service $service) { $this->service = $service; } } $form = new Form; $form->setService($service); 
  В этом случае $form не знает о местонахождении $service и обычно считается хорошей идеей.  Чтобы убедиться, что вам не нужно настраивать все зависимости самостоятельно каждый раз, когда вам нужна Form , вы можете использовать диспетчер служб для создания фабрики. 
  Один из способов (есть больше) для создания фабрики – добавить метод getServiceConfiguration() в свой класс модуля и использовать закрытие для создания экземпляра объекта Form .  Это пример внедрения Service в Form : 
 public function getServiceConfiguration() { return array( 'factories' => array( 'Event\Form\Event' => function ($sm) { $service = $sm->get('Event\Service\EventService'); $form = new Form; $form->setService($service); return $form; } ) ); } 
  Затем вы просто получаете Form у своего менеджера обслуживания.  Например, в вашем контроллере: 
 $form = $this->getServiceLocator()->get('Event\Form\Event'); 
Второй вариант – вытягивать зависимости . Хотя это не рекомендуется для классов, таких как формы, вы можете ввести менеджера сервисов, чтобы форма могла самостоятельно вытягивать зависимости:
 class Form { protected $sm; public function setServiceManager(ServiceManager $sm) { $this->sm = $sm; } /** * This returns the Service you depend on * * @return Service */ public function getService () { return $this->sm->get('Event\Service\EventService'); } } 
Однако этот второй вариант связывает ваш код с ненужными связями, и это очень сложно проверить ваш код. Поэтому, пожалуйста, используйте инъекцию зависимостей, а не вытягивайте зависимости самостоятельно. Есть только несколько случаев, когда вы, возможно, захотите самостоятельно вытащить зависимости:
Вы можете просто настроить форму со всеми параметрами в module.php. В следующем коде I:
Код:
 public function getServiceConfiguration() { return array( 'factories' => array( 'my_form' => function ($sm) { $model = new \MyModule\Form\MyForm($sm->get('something1')); $obj = $sm->get('something2'); $model->setSomething($obj); return $model; }, ), ); } 
А затем в контроллере следующая строка заполнит ваш объект всеми необходимыми зависимостями
 $form = $this->getServiceLocator()->get('my_form'); 
Используйте диспетчер элементов формы, чтобы получить форму в контроллере:
  $form = $this->getServiceLocator()->get('FormElementManager')->get('Path\To\Your\Form', $args); 
Тогда в вашей форме это станет
 <?php namespace Your\Namespace; use Zend\Form\Form; use Zend\ServiceManager\ServiceLocatorAwareInterface; use Zend\ServiceManager\ ServiceLocatorAwareTrait; class MyForm extends Form implements ServiceLocatorAwareInterface { use ServiceLocatorAwareTrait; public function __construct($class_name, $args) { /// you cannot get the service locator in construct. } public function init() { $this->getServiceLocator()->get('Path\To\Your\Service'); } }