当前位置: 首页 > news >正文

海南高端建设网站网站开发类标书报价明细表

海南高端建设网站,网站开发类标书报价明细表,十二师建设局网站,无锡高端网站建设机构文章目录 校验器校验器类型@Validate 注解属性说明校验器校验主要流程系统校验器每个属性存储结构校验器规则定义,注解、注解解析器定义校验器注解使用实现一个自定义的校验器校验器注解校验器注解解析器校验器规则系统校验器Controller/Action 绑定校验器校验器 校验器是 sw… 文章目录 校验器校验器类型@Validate 注解属性说明校验器校验主要流程系统校验器每个属性存储结构校验器规则定义,注解、注解解析器定义校验器注解使用 实现一个自定义的校验器校验器注解校验器注解解析器校验器规则系统校验器Controller/Action 绑定校验器 校验器 校验器是 swoft2 中一个常用的组件。 校验器在 RPC服务、WS服务、HTTP 服务中均有涉及,用来校验客户端上传到服务端的数据是否合法。 校验器类型 校验器一般分为两种,系统校验器,和自定义校验器。 系统校验器是通过 @Validator 标签进行注解的一个校验器类(没有方法只有属性),每个属性上通过不同的注解(如:@Length @IsString )来说明校验时候参数要符合的规则。 自定义校验器,同样需要 @Validator 标签对校验的类进行注解,但是类必须要实现 ValidatorInterface 接口,只有实现接口validate(array $data, array $params),才会称为自定义校验器(源码中有此判断,参见:src/Annotation/Parser/ValidatorParser.php)。注意自定义校验器,只会校验 body 中数据,且自定义校验器,只会使用 body 中数据和 params,其他 @Validate 属性,并不会使用。 /*** Class CustomerValidator** @since 2.0** @Validator(name="userValidator")*/ class CustomerValidator implements ValidatorInterface {/*** @param array $data 这是自定义校验器中* @param array $params** @return array* @throws ValidatorException*/public function validate(array $data, array $params): array{$start = $data['start'] ?? null;$end = $data['end'] ?? null;if ($start === null $end === null) {throw new ValidatorException('Start time and end time cannot be empty');}if ($start $end) {throw new ValidatorException('Start cannot be greater than the end time');}return $data;} }@Validate 注解 属性说明 /*** Class** @since 2.0** @Annotation* @Target("METHOD")* @Attributes({* @Attribute("validator", type="string"),* @Attribute("fields", type="array"),* @Attribute("params", type="array"),* @Attribute("message", type="string"),* })*/ class Validate {}以上为 @Validate 注解的参数要求,具体说明见下表: 注解参数参数类型是否必须备注validator字符串是已经定义好的校验器的名字fields数组是校验器中的属性(对应请求中的参数)。不指定,默认校验校验器中所有属性。如果指定的值在校验器中不存在,那么控制器中仍然可以接收到参数,但是不会有任何校验!!!unfields数组否不进行校验的属性params数组否用在自定义校验器中,用户手动传递到校验器的数据注:自定义校验器时候才会使用message字符串否校验失败时候提示信息type字符串否校验数据所在请求对象中的位置(get/body/path)@Validate 注解用于 method 上,示例: // 示例1:通过系统默认校验器,校验 post 请求中的参数 /*** @RequestMapping("account")* @param Request $request* @param Response $response* @return Response* @throws InvalidArgumentException* @Validate(validator="userValidator", fields={"name", "password"}, type="body")*/ public function account(Request $request, Response $response): Response;// 示例2:通过系统默认的校验器校验自定义 path 参数/*** @RequestMapping(route="/[list-{page}.html|index.html]", params={"page"="[2-9]\d*|1\d+"}, method={"GET"})* @View("home/index")* @Validate(validator=PageListDto::class, fields={"page", "size"}, type="path")** @param Request $request* @param Response $response* @return Response*/ public function index(Request $request, Response $response): Response注意:@Validate 的 type 参数十分重要,默认值为 body,也就是默认校验 post 请求参数。如果是校验 get 参数,或者自定义 path 中的自定义参数,必须要写明类型。否则校验出错。 校验器校验主要流程 以 HTTP 服务为例,可以参照 http-server 组件中的 src/Middleware/ValidatorMiddleware.php 中间件,此中间件可以通过定义核心 Bean 的方式,将其挂载到 HTTP 服务上。从相关代码可以看出,中间件运行期间,通过 ValidateRegister::getValidates()方法提取访问接口上绑定的校验器相关信息。 class ValidatorMiddleware implements MiddlewareInterface {/*** @param ServerRequestInterface $request* @param RequestHandlerInterface $handler** @return ResponseInterface* @throws ValidatorException*/public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface{// 获取路由匹配结果,如果未匹配成功,此中间件不做处理,交给下一个中间件。/* @var Route $route */[$status, , $route] = $request-getAttribute(Request::ROUTER_ATTRIBUTE);if ($status !== Router::FOUND) {return $handler-handle($request);}// 如果路由匹配成功,获取路由绑定的处理器(controller/action)// Controller and method$handlerId = $route-getHandler();[$className, $method] = explode('@', $handlerId);// 获取 controller/action 方法上通过注解绑定的校验器(可以多个)// Query validates$validates = ValidateRegister::getValidates($className, $method);// 如果没有,说明不用校验,交给下一个中间件处理if (empty($validates)) {return $handler-handle($request);}// 获取校验涉及的相关数据$data = $request-getParsedBody();$query = $request-getQueryParams();$path = $route-getParams();// ParsedBody is empty string$parsedBody = $data = empty($data) ? [] : $data;$notParsedBody = !is_array($data);if ($notParsedBody) {$parsedBody = [];}// 获取校验器组件的实例对象/* @var Validator $validator */
http://www.zqtcl.cn/news/544189/

相关文章:

  • 青岛网站建设企业建站北京网站模仿
  • 广州建设网站的公司简介湛江建设厅网站
  • 做网站不赚钱了网站关键词排行查询
  • 印度人通过什么网站做国际贸易三门峡做网站
  • 网站排名快速提升工具招远建网站首选公司
  • 手机网站格式商城网游开发公司
  • 手机怎样创建网站长春网站建设哪家专业
  • 做pop网站定制开发教程
  • 成都响应式网站建报告问题
  • 做设计找素材的+网站有哪些建立平台什么意思
  • 网站设置在哪里找宁德网站建设制作
  • logo网站设计素材品牌高端网站建设公司
  • 芙蓉区乡建设局网站郑州网站建设qicaizz
  • 网站建设的缺陷个人网站制作图片
  • 四川省建设厅注册管理中心网站设计上海2021门票
  • 帝国cms做微网站人力资源公司怎么开
  • 网站建设学徒松江品划做网站公司
  • 灯饰网站需要这么做深圳专业网站设计公司
  • 政务网站设计wordpress 嵌入html5
  • 移动网站 pc网站的区别吗网站建设工厂
  • 有意义网站织梦圈子如何调用网站默认模板
  • 南京公司网站模板建站网页制作中的网站维护
  • 微信分享 淘宝网站 怎么做wordpress访问慢
  • 网站后台制作沈阳营销型网站制作技术
  • 微页制作平台网站建设wordpress文章显示数量
  • 望野古诗王绩seo优化系统
  • 网站设计大概流程惠城区龙丰街道
  • 游戏平台十大排名南宁seo优化公司
  • 佛山外贸网站建设方案企业管理控制系统
  • 分类信息网站如何做排名品牌建设卓有成效