/** * @expectedException \LogicException * @expectedExceptionMessage Нельзя указать, что запрос успешен, если в нем есть ошибки. Кол-во ошибок: 2; Ошибки: 'first-error'; 'second-error' */ public function testObjCannotBeSuccessfulWhenGetErrors() { $this->obj->addError('first-error'); $this->obj->addError('second-error'); $this->assertFalse($this->obj->isSuccess()); $this->obj->setSuccess(true); }
/** * [ВНИМАНИЕ] * Если у сущности генератор первичного ключа отсутствует, т.е. необходимо задать вручную ключ, то необходимо удалить * первичный ключ из структуры, чтобы не было попыток найти эту сущность. Ошибка описана в ссылке ниже * @link https://github.com/jamesmoey/extjs-bundle/issues/17 * @inheritdoc */ public function run() { $this->checkIsInit(); $obj = json_decode($this->requestContent, false, 512, JSON_BIGINT_AS_STRING); $response = new RestResponse(); $savedPKValueFromRequestData = null; $PKFieldName = $this->getPKFieldName(); $entityNotHaveIdGenerator = $this->classMetadata->generatorType == ClassMetadata::GENERATOR_TYPE_NONE; if ($entityNotHaveIdGenerator) { if (!$this->isObjectHasPKField($obj) && !$this->isObjectHasNewPKField($obj)) { $response->setSuccess(false)->setStatusCode(RestResponse::STATUS_CODE_WRONG_INPUT_DATA)->setMessage(sprintf("Не указан первичный ключ (%s)", $PKFieldName)); return $response; } elseif (!$this->isObjectHasPKField($obj) && $this->isObjectHasNewPKField($obj)) { $savedPKValueFromRequestData = $this->getNewPKValueFromObject($obj); unset($obj->{$this->getNewPKValueFromObject($obj)}); } elseif ($this->isObjectHasPKField($obj) && !$this->isObjectHasNewPKField($obj)) { $savedPKValueFromRequestData = $obj->{$PKFieldName}; unset($obj->{$PKFieldName}); } } $serializedObj = json_encode($obj); $entity = $this->serializer->deserialize($serializedObj, $this->classMetadata->getName(), 'json', DeserializationContext::create()->setGroups([Action::GROUP_DEFAULT, Action::GROUP_POST])); if ($entityNotHaveIdGenerator) { EntityHelper::changePKValue($this->em, $entity, $savedPKValueFromRequestData); } $validator = $this->validator; /** @var ConstraintViolationList $validations */ $validations = $validator->validate($entity); if (sizeof($validations) === 0) { try { $this->em->persist($entity); $this->em->flush(); $this->em->refresh($entity); $response->setSuccess(true)->setData($entity)->setStatusCode(RestResponse::STATUS_CODE_OK); } catch (DBALException $e) { $response->setSuccess(false)->setMessage($e->getMessage())->setStatusCode(RestResponse::STATUS_CODE_WRONG_INPUT_DATA); } } else { $response->setSuccess(false)->setStatusCode(RestResponse::STATUS_CODE_WRONG_INPUT_DATA)->setErrors($validations); } return $response; }