验证场景

验证器支持定义场景,便于验证不同场景下的数据。


属性定义

通常使用如下方式:

  1. namespace app\index\validate;
  2. use ginkgo\Validate;
  3. class User extends Validate {
  4. protected $rule = array(
  5. 'user_name' => array(
  6. 'length' => '1,30',
  7. 'format' => 'alpha_dash',
  8. ),
  9. 'user_mail' => array(
  10. 'max' => 300,
  11. 'format' => 'email',
  12. ),
  13. 'user_ids' => array(
  14. 'require' => true,
  15. ),
  16. 'act' => array(
  17. 'require' => true,
  18. ),
  19. );
  20. protected $scene = array(
  21. 'submit' => array(
  22. 'user_name',
  23. 'user_mail',
  24. ),
  25. 'status' => array(
  26. 'user_ids',
  27. 'act',
  28. ),
  29. 'delete' => array(
  30. 'user_ids',
  31. ),
  32. );
  33. }

方法定义

使用 setScene 方法定义场景,如

  1. class User extends Validate {
  2. protected $rule = array(
  3. 'user_name' => array(
  4. 'length' => '1,30',
  5. 'format' => 'alpha_dash',
  6. ),
  7. 'user_mail' => array(
  8. 'max' => 300,
  9. 'format' => 'email',
  10. ),
  11. 'user_ids' => array(
  12. 'require' => true,
  13. ),
  14. 'act' => array(
  15. 'require' => true,
  16. ),
  17. );
  18. function __construct() { //构造函数
  19. $scene = array(
  20. 'submit' => array(
  21. 'user_name',
  22. 'user_mail',
  23. ),
  24. 'status' => array(
  25. 'user_ids',
  26. 'act',
  27. ),
  28. 'delete' => array(
  29. 'user_ids',
  30. ),
  31. );
  32. $this->setScene($scene);
  33. }
  34. }

setScene 方法说明

  1. function setScene( $scene [, $value = array()] )

参数

  • scene 场景

    支持两种类型

    字符串:场景名

    数组:批量设置场景

  • value 场景值

    scene 为字符串时为必须,当 scene 为数组时自动忽略。


场景调用方法

在需要进行验证的地方调用 scene 方法

  1. $data = array(
  2. 'user_name' => 'ginkgo',
  3. 'user_mail' => 121,
  4. );
  5. $validate = Loader::validate('User');
  6. $result = $validate->scene('submit')->verify($data);
  7. if(!$result){
  8. print_r($validate->getMessage());
  9. }

验证场景还可配合多个方法使用,说明如下:

方法名 描述
scene 使用场景
only 需要验证的字段
remove 移除验证规则
append 追加验证规则

注意:所有方法均支持链式操作,优先级为 only > remove > append