. */ namespace SP\Modules\Web\Controllers\Traits; use Exception; use SP\Core\Context\SessionContext; use SP\Core\Exceptions\SPException; use SP\Http\Json; use SP\Http\JsonResponse; /** * Trait JsonTrait * * @property SessionContext $session * @property \Klein\Klein $router */ trait JsonTrait { /** * Returns JSON response * * @param int $status Status code * @param string $description Untranslated description string * @param array|null $messages Untranslated massages array of strings * * @return bool * @throws \SP\Core\Exceptions\SPException */ protected function returnJsonResponse(int $status, string $description, ?array $messages = null): bool { $jsonResponse = new JsonResponse(); $jsonResponse->setStatus($status); $jsonResponse->setDescription($description); if (null !== $messages) { $jsonResponse->setMessages($messages); } return Json::factory($this->router->response())->returnJson($jsonResponse); } /** * Returns JSON response * * @param mixed $data * @param int $status Status code * @param string|null $description Untranslated description string * @param array|null $messages * * @return bool * @throws \SP\Core\Exceptions\SPException */ protected function returnJsonResponseData( $data, int $status = JsonResponse::JSON_SUCCESS, ?string $description = null, ?array $messages = null ): bool { $jsonResponse = new JsonResponse(); $jsonResponse->setStatus($status); $jsonResponse->setData($data); if (null !== $description) { $jsonResponse->setDescription($description); } if (null !== $messages) { $jsonResponse->setMessages($messages); } return Json::factory($this->router->response())->returnJson($jsonResponse); } /** * Returns JSON response * * @param \Exception $exception * @param int $status * * @return bool * @throws \SP\Core\Exceptions\SPException */ protected function returnJsonResponseException(Exception $exception, int $status = JsonResponse::JSON_ERROR): bool { $jsonResponse = new JsonResponse(); $jsonResponse->setStatus($status); $jsonResponse->setDescription($exception->getMessage()); if ($exception instanceof SPException && $exception->getHint() !== null) { $jsonResponse->setMessages([$exception->getHint()]); } return Json::factory($this->router->response())->returnJson($jsonResponse); } }