_status = (bool)$status; $this->_message = (String)$message; $this->_code = (int)$code; $this->_attributes = []; } public function __get($name) { switch ($name) { case 'status': return $this->_status; case 'code': return $this->_code; case 'message': return $this->_message; default: return isset($this->_attributes[$name]) ? $this->_attributes[$name] : null; } } public function __set($name, $value) { switch ($name) { case 'status': if ($value !== 'false' && $value !== 'true') { throw new InvalidParamException('Attribute "status" must have a Boolean "true" or "false" value.'); } $this->_status = $value; break; case 'code': if (!is_int($value)) { throw new InvalidParamException('Attribute "code" must be a Integer.'); } $this->_code = $value; break; case 'message': if (!is_string($value)) { throw new InvalidParamException('Attribute "message" must be a String.'); } $this->_message = $value; break; default: $this->_attributes[$name] = $value; } return $this; } function __unset($name) { if (in_array($name, array('status', 'message', 'code'))) { throw new \Exception("property '$name' is basic and can't be unset.", 1); } unset($this->_attributes[$name]); } function __isset($name) { switch ($name) { case 'status': return isset($this->_status); case 'code': return isset($this->_code); case 'message': return isset($this->_message); default: return isset($this->_attributes[$name]); } } /** * Встановити успішний статус * * @param string $message - повідомлення для відповіді * @param int $code * * @throws \yii\base\InvalidParamException */ public function setSuccess($message = null, $code = 200) { if (null !== $message && !is_string($message)) { throw new InvalidParamException('Attribute "message" must be a String.'); } $this->_status = true; $this->_message = null === $message ? $message : (string) $message; $this->_code = (int)$code; } /** * Встановити статус помилки * * @param string $message - опис помилки * @param int $code * * @throws \yii\base\InvalidParamException */ public function setError($message = null, $code = 400) { if (null !== $message && !is_string($message)) { throw new InvalidParamException('Attribute "message" must be a String.'); } $this->_status = false; $this->_message = null === $message ? $message : (string) $message; $this->_code = (int)$code; } /** * Встановити статус із звітлом помилки * * @param string $message - загальний опис помилки * @param array $errors - масив з помилками відповідних атрибутів де ключ назва атрибуту, значення опис помилки * @param int $code * * @throws \yii\base\InvalidParamException */ public function setErrorReport($message = null, $errors, $code = 400) { if (null !== $message && !is_string($message)) { throw new InvalidParamException('Attribute "message" must be a String.'); } if (!is_array($errors)) { throw new InvalidParamException('Attribute "errors" must be an Array.'); } $this->_status = false; $this->_message = null === $message ? $message : (string) $message; $this->_code = (int)$code; $this->_attributes['errors'] = $errors; } public function isSuccess() { return $this->_status; } public function isError() { return !$this->_status; } /** * Повертає масив з повним описом даних статусу * * @return array */ public function toRawArray() { $ret = $this->_attributes; if (!empty($this->_message)) { $ret['message'] = $this->_message; } return $ret; } /** * Повертає повний опис даних статусу в JSON форматі * * @return string */ public function toJson() { return json_encode($this->toRawArray(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } /** * Повертає повний опис даних статусу як стрічку в рідному форматі опису масивів PHP * * @return string */ public function toRawPhpString() { return var_export($this->toRawArray()); } }