Существует несколько способов, как это сделать. Грязный, но проще всего просто дать форму в своем действии The Entity менеджер контроллера корыто параметров следующим образом:
/**
* @var Doctrine\ORM\EntityManager
*/
protected $em;
public function getEntityManager()
{
if (null === $this->em) {
$this->em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default');
}
return $this->em;
}
public function setEntityManager(EntityManager $em)
{
$this->em = $em;
}
...
public function yourAction() {
...
$form = new YourForm($this->getEntityManger());
...
}
Затем можно просто вызвать методы объекта диспетчера в вашей форме:
public function __construct($em)
{
...
$repository = $em->getRepository('\Namespace\Entity\Namespace');
...
}
более сложный, но красивый способ требует, чтобы добавить функцию getServiceconfig внутри модулей module.php:
public function getServiceConfig()
{
return array(
'factories' => array(
'YourFormService' => function ($sm) {
$form = new YourForm($sm);
$form->setServiceManager($sm);
return $form;
}
)
);
}
в вашей форме Там вы можете нужно implent в ServiceMa nagerAwareInterface и setServiceManager setter.
use Zend\Form\Form as BaseForm;
use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
class CategoryForm extends BaseForm implements ServiceManagerAwareInterface
{
protected $sm;
public function setServiceManager(ServiceManager $sm)
{
$this->sm = $sm;
}
public function __construct($sm)
{
...
$em = $sm->get('Doctrine\ORM\EntityManager');
...
}
Затем вам нужно позвонить по своей форме в свой контроллер по-разному. Обычный конструктор $form = new YourForm();
не будет работать с фабрикой, которую мы создали.
$form = $this->getServiceLocator()->get('YourFormService');
Я обычно использую грязный способ получить EntityManager, но как только мне нужен Service Locator создать фабрику лично я не думаю, что его стоит того, чтобы создать большую нагрузку с услугами.
Надеюсь, это немного помогло.
Можете ли вы разместить свой код, пожалуйста, –
. Некоторый код поможет нам вести вас. – 125369