OroCrm с использованием FOSRestBundle $this->getManager()->createEntity()
Я хочу создать пост API, и у меня есть проблема, когда RestController делает эту строку:
$ entity = $this-> getManager () -> createEntity();
Он возвращает Null, поэтому процесс проверяет ошибку $form, и у меня ошибка 500. В то время как я создаю новую сущность непосредственно в публичной функции handleCreateRequest(), она работает хорошо, моя сущность создана и помещена в мою базу данных. Так почему createEntity() возвращает null, зная, что этот метод находится в ApiEntityManager.php и возвращает новый класс $this->
это мой метод пост контроллера:
/**
* REST POST Product
*
* @ApiDoc(
* section="Product",
* description="Post product item",
* resource=true
* )
* @return \Symfony\Component\HttpFoundation\Response
*/
public function postAction()
{
return $this->handleCreateRequest();
}
И это handleCreateRequest()
/**
* Create new
*
* @return Response
*/
public function handleCreateRequest()
{
$entity = $this->getManager()->createEntity(); <---- this line return null
-------------------------------------------------------------------------
// $entity = new \GroupeGC\Bundle\ProductBundle\Entity\Product(); |
// $entity->setCode( $this->getRequest()->get("code")); |
// $entity->setLabel( $this->getRequest()->get("label")); |
-------------------------------------------------------------------------
//this part of code work well but it's not generic
$isProcessed = $this->processForm($entity);
if ($isProcessed) {
$entityClass = ClassUtils::getRealClass($entity);
$classMetadata = $this->getManager()->getObjectManager()->getClassMetadata($entityClass);
$view = $this->view($classMetadata->getIdentifierValues($entity), Codes::HTTP_CREATED);
} else {
$view = $this->view($this->getForm(), Codes::HTTP_BAD_REQUEST);
}
return $this->handleView($view);
}
РЕДАКТИРОВАТЬ 1:
если я делаю var_dump() из $entity: результат будет следующим: строка 'GroupeGC\Bundle\ProductBundle\Entity\Product' (длина = 44) (поэтому она не равна нулю) Так почему это не работает 0_o
1 ответ
Вы реализовали
/**
* {@inheritdoc}
*/
public function getManager()
{
return $this->get('your_manager_service_name');
}
В вашем контроллере?
И your_manager_service_name должно быть объявлено в services.yml примерно так:
your_manager_service_name:
class: %your_manager_service_name.class%
arguments:
- %your.entity.class%
- @doctrine.orm.entity_manager