/** * 直接 parse $_REQUEST * @param $_data * @return bool */ public function parse($data) { $ctrlName = Config::getField('project', 'default_ctrl_name', 'main\\main'); $methodName = Config::getField('project', 'default_method_name', 'main'); $apn = Config::getField('project', 'ctrl_name', 'a'); $mpn = Config::getField('project', 'method_name', 'm'); if (isset($data[$apn])) { $ctrlName = \str_replace('/', '\\', $data[$apn]); } if (isset($data[$mpn])) { $methodName = $data[$mpn]; } if (!empty($_SERVER['PATH_INFO'])) { //swoole_http模式 需要在onRequest里,设置一下 $_SERVER['PATH_INFO'] = $request->server['path_info'] $routeMap = ZRoute::match(Config::get('route', false), $_SERVER['PATH_INFO']); if (is_array($routeMap)) { $ctrlName = \str_replace('/', '\\', $routeMap[0]); $methodName = $routeMap[1]; if (!empty($routeMap[2]) && is_array($routeMap[2])) { //参数优先 $data = $data + $routeMap[2]; } } } Request::init($ctrlName, $methodName, $data, Config::getField('project', 'view_mode', 'Php')); return true; }
/** * 直接 parse $_REQUEST * @param $_data * @return bool */ public function parse($data) { $this->_ctrl = Config::getField('project', 'default_ctrl_name', 'main\\main'); $this->_method = Config::getField('project', 'default_method_name', 'main'); $apn = Config::getField('project', 'ctrl_name', 'a'); $mpn = Config::getField('project', 'method_name', 'm'); if (isset($data[$apn])) { $this->_ctrl = \str_replace('/', '\\', $data[$apn]); } if (isset($data[$mpn])) { $this->_method = $data[$mpn]; } if (!empty($_SERVER['PATH_INFO'])) { $routeMap = ZRoute::match(Config::get('route', false), $_SERVER['PATH_INFO']); if (is_array($routeMap)) { $this->_ctrl = $routeMap[0]; $this->_method = $routeMap[1]; if (!empty($routeMap[2]) && is_array($routeMap[2])) { //参数优先 $data = $data + $routeMap[2]; } } } $this->_params = $data; $this->_tpl_file = str_replace('\\', DS, $this->_ctrl) . DS . $this->_method . '.php'; return true; }
/** * 包格式: 包总长+命令id+请求id+数据 * * @param $_data * @return bool */ public function parse($_data) { $ctrlName = Config::getField('project', 'default_ctrl_name', 'main\\main'); $methodName = Config::getField('project', 'default_method_name', 'main'); if (empty($this->_cache)) { $this->_cache = ZCache::getInstance('Php'); } $fd = Request::getFd(); $cacheData = $this->_cache->get($fd); if (!empty($cacheData)) { $_data = $cacheData . $_data; $this->_cache->delete($fd); } if (empty($_data)) { return false; } $packData = new MessagePacker($_data); $packLen = $packData->readInt(); $dataLen = \strlen($_data); if ($packLen > $dataLen) { $this->_cache->set($fd, $_data); return false; } elseif ($packLen < $dataLen) { $this->_cache->set($fd, \substr($_data, $packLen, $dataLen - $packLen)); } $packData->resetOffset(4); $data = []; $data['_cmd'] = $packData->readInt(); $pathinfo = Config::getField('cmdlist', $data['_cmd']); $data['_rid'] = $packData->readInt(); $params = $packData->readString(); $unpackData = \json_decode(gzdecode($params), true); if (!empty($unpackData) && \is_array($unpackData)) { $data += $unpackData; } $routeMap = ZRoute::match(Config::get('route', false), $pathinfo); if (is_array($routeMap)) { $ctrlName = $routeMap[0]; $methodName = $routeMap[1]; if (!empty($routeMap[2]) && is_array($routeMap[2])) { //参数优先 $data = $data + $routeMap[2]; } } Request::init($ctrlName, $methodName, $data); return true; }