OroCrm使用FOSRestBundle $ this-> getManager() - > createEntity()

时间:2014-07-11 09:51:32

标签: php symfony fosrestbundle orocrm

我想创建一个post API,当RestController执行此行时我遇到了问题:

$ entity = $ this-> getManager() - > createEntity();

它返回Null所以验证$ form bug的过程我有一个错误500。 而我直接在公共函数handleCreateRequest()中创建一个新实体 它工作得很好,我的实体被创建并放入我的数据库中。 那么为什么createEntity()返回null知道这个方法在ApiEntityManager.php中并返回 new $ this-> class

这是我的控制器发布方法:

 /**
* 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:

如果我执行$ entity的var_dump():结果是: string'GroupeGC \ Bundle \ ProductBundle \ Entity \ Product'(length = 44)(所以它不为null) 那么为什么它不起作用0_o

1 个答案:

答案 0 :(得分: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