Я пытаюсь реализовать простую обработку формы с использованием подхода EntityManager::transactional(function($em) {});
. Кажется довольно простым, но возникает вопрос: как передать дополнительные значения для такой реализации? Чтобы быть точным, я хочу сделать следующееЯвная транзакция в доктрине2 с использованием транзакционного метода
$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$request = $this->getRequest();
$form = new BugForm();
$form->get('reporter')->setValueOptions(
$em->getRepository('Application\Entity\Person')->getPersonListArray()
);
$form->get('engineer')->setValueOptions(
$em->getRepository('Application\Entity\Person')->getPersonListArray()
);
$form->get('products')->setValueOptions(
$em->getRepository('Application\Entity\Product')->getProductListArray()
);
$confirmation = "";
if($request->isPost()) {
$em->transactional(function($em) {
$form = new BugForm();
$request = $this->getRequest();
$form->setData($request->getPost());
if($form->isValid()) {
$form = new BugForm();
$hydrator = new DoctrineHydrator($em);
$data = $form->getData();
$data['created'] = time();
$data['status'] = 'OPEN';
$bug = $hydrator->hydrate($data, new Bug());
$em->persist($bug);
$em->flush();
$confirmation = "Created bug with ID ".$bug->getId()."<br/>";
}
});
}
return array(
'form' => $form,
'confirmation' => $confirmation
);
Проблема в том, что this->getRequest()
вызов в анонимной функции не создает данных, так что я не в состоянии заполнить объект BugForm. Конечно, я мог бы просто использовать суперглобальный массив _POST
, но он не кажется правильным ...
я не знал о 'use' но сделали некрасивый хак с установкой' $ confirmation' к Глобальный. В любом случае, спасибо :) – Moby04