标题:[实践OK]easyswoole验证器,如何在控制器使用验证例子(demo) 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Thu, 08 Oct 2020 22:51:51 +0000 作者:jackxiang 地址:http://jackxiang.com/post/10711/ 内容: 验证器: https://www.bookstack.cn/read/easyswoole-3.x-zh/Components-validate.md App/HttpController/Index.php $validate = new Validate(); $validate->addColumn('name')->required('姓名必填'); $validate->addColumn('age')->required('年龄必填')->between(20, 30, '年轻只能在20岁到30岁之前'); if ($this->validate($validate)) { } else { //return $this->response()->write($validate->getError()->__toString()); $this->api(ApiStatusCode::get(''), [], "{$validate->getError()->getField()}@{$validate->getError()->getFieldAlias()}:{$validate->getError()->getErrorRuleMsg()}"); return false; } App/HttpController/BaseController.php public function actionNotFound(?string $action): void { //$this->writeJson(Status::CODE_NOT_FOUND); $this->api(ApiStatusCode::get(''), [], "无此方法"); } protected function onRequest(?string $action): ?bool { $ret = parent::onRequest($action); if($ret === false){ return false; } $v = $this->validateRule($action); if($v){ $ret = $this->validate($v); if($ret == false){ //$this->writeJson(Status::CODE_BAD_REQUEST,null,"{$v->getError()->getField()}@{$v->getError()->getFieldAlias()}:{$v->getError()->getErrorRuleMsg()}"); $this->api(ApiStatusCode::get(''), [], "{$v->getError()->getField()}@{$v->getError()->getFieldAlias()}:{$v->getError()->getErrorRuleMsg()}"); return false; } } return true; } protected function validateRule(?string $action):?Validate { } 统一验证: class Index extends BaseController { function index() { $this->response()->write("123"); } /** * 验证 * * {@inheritdoc} * @see \App\HttpController\Index\Index::validateRule() */ protected function validateRule(?string $action): ?Validate { $v = new Validate(); $params = $this->request()->getRequestParam(); echo "Here:\n"; var_dump($action); switch ($action) { case 'index': { $v->addColumn('title', '竞赛标题') ->required('不能为空') ->notEmpty(); $v->addColumn('limit', '每页条数') ->integer(); $v->addColumn('page', '当前页码') ->integer(); if (isset($params['recommend_status'])) { $v->addColumn('recommend_status', '推荐状态')->integer(); } if (isset($params['act_status'])) { $v->addColumn('act_status', '活动状态')->integer(); } break; } case 'searchActivity': { $v->addColumn('title', '竞赛标题') ->required('不能为空') ->notEmpty(); $v->addColumn('limit', '每页条数') ->integer(); $v->addColumn('page', '当前页码') ->integer(); if (isset($params['recommend_status'])) { $v->addColumn('recommend_status', '推荐状态')->integer(); } if (isset($params['act_status'])) { $v->addColumn('act_status', '活动状态')->integer(); } break; } case 'getRobotAnswer': { $v->addColumn('topic_id', '题目id') ->required('不能为空') ->integer(); $v->addColumn('score', '积分') ->integer(); break; } case 'saveActivity': { $v->addColumn('title', '竞赛标题') ->required('不能为空') ->notEmpty(); $v->addColumn('type', '展示模式') ->required('不能为空') ->integer(); $v->addColumn('description', '竞赛描述') ->required('不能为空') ->notEmpty(); $v->addColumn('start_time', '开始时间') ->required('不能为空') ->integer(); $v->addColumn('end_time', '结束时间') ->required('不能为空') ->integer(); $v->addColumn('paper_status', '试卷状态') ->required('不能为空') ->integer(); $v->addColumn('act_status', '活动状态') ->required('不能为空') ->integer(); if (isset($params['act_id'])) { $v->addColumn('act_id', '竞赛id')->integer(); } if (isset($params['recommend_status'])) { $v->addColumn('recommend_status', '推荐状态')->integer(); } if (isset($params['recommend_index'])) { $v->addColumn('recommend_index', '推荐序号')->integer(); } break; } case 'delActivity': { $v->addColumn('act_id', '竞赛id') ->required('不能为空') ->integer() ->min(0); break; } case 'getActivity': { $v->addColumn('act_id', '竞赛id') ->required('不能为空') ->integer(); break; } case 'getActivityList': { $v->addColumn('recommend_status', '推荐状态') ->required('不能为空') ->integer(); $v->addColumn('limit', '列表数') ->required('不能为空') ->integer(); break; } case 'getPaper': { $v->addColumn('act_id', '竞赛id') ->required('不能为空') ->integer(); $v->addColumn('paper_nums', '试卷题量') ->required('不能为空') ->integer(); break; } case 'addPaperTopic': { $v->addColumn('act_id', '竞赛id') ->required('不能为空') ->integer(); $v->addColumn('topic_id', '题目id') ->required('不能为空') ->notEmpty(); $v->addColumn('topic_title', '题目标题') ->required('不能为空') ->notEmpty(); $v->addColumn('topic_label', '题目标签') ->required('不能为空') ->notEmpty(); break; } case 'delPaperTopic': { $v->addColumn('act_id', '竞赛id') ->required('不能为空') ->integer(); $v->addColumn('topic_id', '题目id') ->required('不能为空') ->notEmpty(); break; } case 'updatePaper': { $v->addColumn('act_id', '竞赛id') ->required('不能为空') ->integer(); $v->addColumn('type', '答题类型') ->required('不能为空') ->integer(); $v->addColumn('nums', '题量') ->required('不能为空') ->integer(); break; } case 'updateScoreSet': { $v->addColumn('per_score', '答对得分') ->required('不能为空') ->integer(); $v->addColumn('win_score', '获胜得分') ->required('不能为空') ->integer(); $v->addColumn('fail_score', '失败得分') ->required('不能为空') ->integer(); break; } } return $v; } App/HttpController/BaseController.php writeJson(200, []); } /** * 获取用户的真实IP * @param string $headerName 代理服务器传递的标头名称 * @return string */ protected function clientRealIP($headerName = 'x-real-ip') { $server = ServerManager::getInstance()->getSwooleServer(); $client = $server->getClientInfo($this->request()->getSwooleRequest()->fd); $clientAddress = $client['remote_ip']; $xri = $this->request()->getHeader($headerName); $xff = $this->request()->getHeader('x-forwarded-for'); if ($clientAddress === '127.0.0.1') { if (!empty($xri)) { // 如果有xri 则判定为前端有NGINX等代理 $clientAddress = $xri[0]; } elseif (!empty($xff)) { // 如果不存在xri 则继续判断xff $list = explode(',', $xff[0]); if (isset($list[0])) $clientAddress = $list[0]; } } return $clientAddress; } protected function input($name, $default = null) { $value = $this->request()->getRequestParam($name); return $value ?? $default; } public function actionNotFound(?string $action): void { $this->api(ApiStatusCode::get(''), [], "无此方法"); } protected function onRequest(?string $action): ?bool { $ret = parent::onRequest($action); if($ret === false){ return false; } $v = $this->validateRule($action); if($v){ $ret = $this->validate($v); if($ret == false){ $this->api(ApiStatusCode::get(''), [], "{$v->getError()->getField()}@{$v->getError()->getFieldAlias()}:{$v->getError()->getErrorRuleMsg()}"); return false; } } return true; } protected function validateRule(?string $action):?Validate { } } Generated by Jackxiang's Bo-blog 2.1.1 Release