/** * Execute filter * * @param $filtername * * @return bool */ public function execute($filtername) { if (!isset($this->impFilters[$filtername])) { //Logger::debug('miss filter %s',$filtername); return true; } $this->app->timer->begin('f_' . $filtername); $filters = $this->impFilters[$filtername]; foreach ($filters as $filter) { if ($filter->execute($this->app) === false) { Logger::debug('call filter %s.%s=false', $filtername, get_class($filter)); $this->app->timer->end('f_' . $filtername); return false; } //Logger::debug('call filter %s.%s=true',$filtername, get_class($filter)); } $this->app->timer->end('f_' . $filtername); return true; }
/** * Get the result of output * * @return array */ private function getResult() : array { if ($this->exception) { $errcode = $this->exception->getMessage(); if ($pos = strpos($errcode, ' ')) { $errcode = substr($errcode, 0, $pos); } if (!preg_match('/^[a-zA-Z0-9\\.\\-_]{1,50}$/', $errcode)) { //普通的错误信息不能传到前端 $errcode = self::STATUS_FATAL; } $result = array('err' => $errcode); if ($errcode == self::STATUS_INPUT) { //输入check错误时,可以带些数据 $result['data'] = $this->outputs; Logger::debug('input data error:%s', print_r($result['data'], true)); } } elseif ($this->error) { $result = array('err' => self::STATUS_FATAL); } else { $result = array('err' => self::STATUS_OK, 'data' => $this->outputs); } foreach ($this->results as $key => $value) { if (!isset($result[$key])) { $result[$key] = $value; } } return $result; }
/** * 错误处理函数 * * @return boolean 如果返回false,标准错误处理处理程序将会继续调用 */ public function errorHandler() { $error = func_get_args(); restore_error_handler(); if (!($error[0] & error_reporting())) { Logger::debug('caught info, errno:%d,errmsg:%s,file:%s,line:%d', $error[0], $error[1], $error[2], $error[3]); set_error_handler(array($this, 'errorHandler')); return false; } if (isset($this->errorTypeMap[$error[0]])) { $logLevel = $this->errorTypeMap[$error[0]]; call_user_func('Logger::' . $logLevel, 'caught ' . $logLevel . ', errno:%d,errmsg:%s,file:%s,line:%d', $error[0], $error[1], $error[2], $error[3]); set_error_handler([$this, 'errorHandler']); return false; } $errmsg = sprintf('caught error, errno:%d,errmsg:%s,file:%s,line:%d', $error[0], $error[1], $error[2], $error[3]); Logger::fatal($errmsg); $this->endStatus = self::ENDSTATUS_ERROR; return true; }