1) 首先 查看一下咱们的目录结构php
2)使用日常的写法来构造一下咱们的验证ajax
这里主要分四步在走,相对于使用独立验证器或者挨个数据验证已经优化了大部分的代码了,可是,当在使用中会发现,咱们在多个验证或者多个模块的时候会出现重复性的冗余去写这一串代码thinkphp
问题? 如何将上诉的代码压缩成一行呢编程
AOP: 在不修改源代码的状况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,提升代码的灵活性和可扩展性,AOP能够说也是这种目标的一种实现
AOP、OOP在字面上虽然很是相似,但倒是面向不一样领域的两种设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以得到更加清晰高效的逻辑单元划分。
咱们引入aop编程的思想来解决的咱们的问题,经过将功能单一的模块合并统一块儿来json
咱们在common
下建立 validate
目录,而且建立一个BaseValidate
文件,继承 think\validate
设计模式
<?php namespace app\common\validate; use app\common\controller\Base; use think\Request; use think\Validate; class BaseValidate extends Validate { /** * 基础类控制器 * @param null|array $data * @return bool */ public function goCheck($data = null) { # 当 data 不存在的时候去自动校验获取到的参数 if( is_null($data) ) { # 获取待验证的参数 $data = Request::instance()->param(); } # 进行验证 if( !$this->check($data) ) { (new Base())->ajaxjson(Base::error, $this->getError()); # 抛出的自定义异常 } return true; }
优化后代码app
瞬间舒服了不少吧,省去了很是多的代码了算是,由于这个东西在不少控制器下都是应该须要进行使用的优化
如baseValidate中的代码,其中有一串代码是is_null,那是为了校验全部传递上来的数据而编写,当咱们须要校验全部的数据的时候只须要这样写this
一样能够校验出数据,可是会有一个疑惑,咱们没有来获取data数据,没法使用data数据,仍是须要在控制器中从新进行获取,这是不可取的,因此我选择这样作spa