ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# 验证器 # 验证器就像是道路红绿灯一样,是基础设施。我在这个上也投入了比较多的心思。 ## 验证器的使用 ## ### 基本使用 ### 首先新建一个校验类,比如 `ArticleAdd`,并且继承 `src\framework\Validation` 类。 class ArticleAdd extends Validation{} 然后在类里添加验证规则,例如字符串: protected $title = array('require', 'string',1,20,'文章标题必须在 10 到 20 个字符以内!'); 最后再控制器中使用该校验器,如下: $params = Request::post(); (new ArticleAdd())->eachFields($params); ### 方法验证中使用参数注入 ### 对于复杂的校验,我们可以使用方法校验。即指定类型为`Method`, 自己指定方法所在的类名和方法名,如下代码: ``` protected $word = [ 'type' => 'Method', 'class' => 'app\\common\\verifications\\WordAdd', 'method_name' => 'wordMustNotExist', 'message' => '该单词已经存在!' ]; ``` 使用方法验证可以对单个值进行复杂的校验,比如检查是否在数据库中存在。 但有时候我们需要借助其他的参数来校验某个参数,比如我们需要检查某个用户下 是否已经存在某个数据的时候,我们可以使用在方法验证中使用参数注入。 在方法验证中,我们可以使用`injection_args`属性来指定注入的参数,前提是注入的参数 需要出现在校验的参数中,可以通过如下的代码加入欲注入的参数: ``` $params = Request::post(); $params['user_id'] = $this->uid; (new WordAdd())->eachFields($params); // 在校验类中指定注入参数 protected $word = [ // 其他参数 'injection_args' => ['user_id'], // 参数注入 'message' => '该用户已经添加该单词' ]; ``` ### 多重验证 ### 有时候,我们需要对一个字段进行复杂的组合验证。比如在单词本的应用中,在添加一个单词的时候, ,即需要检验其基本的数据类型,又要检验其是否在数据表中存在。 这时候,我们就可以使用多重验证功能。 在验证类中,添加验证规则如下,与基本验证不同的是,多重验证是二维数组: ``` protected $word = [ [ 'require' => true, 'type' => 'String', 'length' => '1,64', 'message' => '单词必须在 1 到 64 个字符以内!' ], [ 'type' => 'Method', 'class' => 'app\\common\\verifications\\WordAdd', 'method_name' => 'wordMustNotExist', 'message' => '该单词已经存在!' ] ]; ``` 多重验证允许我们将多个验证规则写成二维数组。