DengBiao преди 1 година
родител
ревизия
0c30bd171d
променени са 1 файла, в които са добавени 253 реда и са изтрити 0 реда
  1. +253
    -0
      src/applet/app/controllers/ControllerBase.php

+ 253
- 0
src/applet/app/controllers/ControllerBase.php Целия файл

@@ -0,0 +1,253 @@
<?php

namespace SRVX\Api\Controllers;

use SRVX\Model\SysModule;
use SRVX\Msg;
use Phalcon\Logger;
use SRVX\Utils\Common;
use Phalcon\Logger\Adapter\Stream;
use App\constants\Common as ICommon;

/**
* Class ControllerBase
* @package SRVX\Api\Controllers
* @property \Phalcon\Tag $tag
* @property \Phalcon\Http\Response\Cookies $cookies
* @property \Phalcon\Escaper $escaper
* @property \SRVX\Service $s
* @property \Redis $redis
* @property \Phalcon\Session\Manager $session
* @property \Phalcon\Config $config
* @property \Phalcon\Cache $cache
*/
class ControllerBase extends \Phalcon\Mvc\Controller
{

protected $limit = 20;
protected $offset = 0;
protected $postAction = [];
protected $userInfo = [];

public function onConstruct()
{
$this->request->isOptions() && (header('HTTP/2.0 204 NO CONTENT') || die);

// 只允许POST的操作
if (!$this->request->isPost() && $this->postAction && in_array($this->dispatcher->getActionName(), $this->postAction)) {
die();
}
}

public function output($code = 0, $msg = null, $data = null)
{
throw new \Exception($msg, $code);
}

public function beforeExecuteRoute()
{
if (in_array($_SERVER["REQUEST_URI"], ICommon::WHITE_URL)) {
$this->userInfo = [];
return true;
}
}

public function afterExecuteRoute()
{

}


/**
* 初始化信息
*/
public function initialize()
{
$this->limit();
$this->offset();
}

public function getRawData($useArray = false)
{
$res = !$this->request->isPost() && !$this->request->isPut() && $this->request->isPatch() && !$this->request->isDelete() ? $this->api(Msg::ErrNotFound) : json_decode(file_get_contents('php://input'), $useArray);

// return $res ?? $this->api(Msg::ErrInvalidArgument);
return $res ?? [];
}

/**
* 输出信息并退出程序
* @param mixed $data
* @param int $count
* @param bool $urlDecodeFlag
*/
public function api($data = Msg::Suc, $count = null, $urlDecodeFlag = false)
{
$preContent = ob_get_contents();
$preContent && die;
$data === true && $data = Msg::Suc;
$data === false && $data = Msg::ErrFailure;
$res = is_array($data) && isset($data['statusCode'], $data['code'], $data['msg']) ? [
'code' => $data['code'],
'msg' => $data['msg'],
'data' => [],
] : ['code' => 0, 'msg' => '', 'data' => $data];
$count !== null && ($res['count'] = $count);
header('Content-type:application/json;charset=utf-8');
is_array($data) && isset($data['statusCode']) && header('HTTP/2.0 ' . $data['statusCode']);
die($urlDecodeFlag ? urldecode(json_encode($res, 320)) : json_encode($res, 320));
}


/**
* 重定向uri
* @param string $uri 'controller/action'
*/
protected function forward($uri)
{
$uriParts = explode('/', $uri);
$params = array_slice($uriParts, 2);
$this->dispatcher->forward(['controller' => $uriParts[0], 'action' => $uriParts[1], 'params' => $params,]);
}

/**
* filter $_GET request
* @param int $setLimit
* @return array
*/
protected function getQuery($setLimit = 0)
{
$get = $this->request->getQuery();
unset($get['_url']);
$data = [];
foreach ($get as $k => $v) {
$k = htmlspecialchars($k);
$v = htmlspecialchars($v);
$data[$k] = $v;
}

if ($setLimit) {
$data['limit'] = $data['limit'] ?? $this->limit;
$data['limit'] > 1000 && $data['limit'] = 1000;
}
return $data;
}

/**
* 过滤字符串
* @param $str
* @return mixed
*/
protected function _trim($str)
{
return trim(preg_replace('/^ +| +$/ ', ' ', preg_replace('/( | |\r\n|\r|\n)+/', ' ', $str)));
}


/**
* [返回每页条数]
* @return [type] [description]
*/
public function limit()
{
if ($this->request->isPost()) {
$pageNum = $this->getRawData('limit')['limit'] ?? '';
} else {
$pageNum = $this->request->get('limit');
}
if (!empty($pageNum)) {
$this->limit = $pageNum;
}
}

/**
* [返回偏移量]
* @return [type] [description]
*/
public function offset()
{
if ($this->request->isPost()) {
$page = $this->getRawData('p')['p'] ?? '';
} else {
$page = $this->request->get('p');
}

if (!empty($page)) {
$this->offset = ($page - 1) * $this->limit;
}
}

/**
* 记录日志
* @param $msg
* @param string $name
* @param bool $mode
*/
public function logger($msg, $name = 'debug', $mode = false)
{
//开启了debug模式才记录日志
if (DEBUG) {
$time = time();
if (file_exists(DIR_LOG)) {
$path = DIR_LOG . date('Y_m_d', $time) . '_' . $name . '.log';
$logger = new Logger('messages', ['main' => new Stream($path),]);
$msg = is_array($msg) ? json_encode($msg, 320) : $msg;
$ip = Common::getRealIP() ? Common::getRealIP() : ' IP NULL ';
$msg = $ip . ' ' . $msg;
$logger->debug($msg);
} else {
if ($mode) {
return;
}
@mkdir(DIR_LOG, 0755, true);
$this->logger($msg, $name, true);
}
}
}


/**
* [校验参数]
* @param [type] $key [description]
* @param [type] $args [description]
* @return [type] [description]
*/
protected function checkParams($argsKey, $args)
{
if (empty($args)) {
$this->api(Msg::ErrParameterCannotBeNull);
}

if (empty($argsKey)) {
$this->api(Msg::NewError(400, 'check params value is null'));
}


foreach ($argsKey as $key => $value) {
if (!array_key_exists($key, $args)) {
$this->api(Msg::NewError(400, '【' . $key . '】 not null'));
} else {
switch ($value) {
case 'array':
if (!is_array($args[$key])) {
$this->api(Msg::NewError(400, '【' . $key . '】 not object'));
}
break;

case 'numeric':
if (!is_numeric($args[$key])) {
$this->api(Msg::NewError(400, '【' . $key . '】 not numeric'));
}
break;

default:
if (!is_string($args[$key])) {
$this->api(Msg::NewError(400, '【' . $key . '】 not string'));
}
break;
}
}
}
}

}

Зареждане…
Отказ
Запис