验证器

验证器是最推荐的方式,为具体的验证场景或者数据定义好验证器类,直接调用验证类的 verify 方法即可完成验证,下面是一个例子:

我们定义一个 app\validate\index\User 验证器类用于 User 的验证,验证器必须继承验证类 ginkgo\Validate

  1. namespace app\validate\index;
  2. use ginkgo\Validate;
  3. class User extends Validate {
  4. protected $rule = array(
  5. 'user_id' => array(
  6. 'require' => true,
  7. 'format' => 'int',
  8. ),
  9. 'user_name' => array(
  10. 'length' => '1,30',
  11. 'format' => 'alpha_dash',
  12. ),
  13. );
  14. }

在需要进行 User 验证的地方,添加如下代码即可:

  1. $data = array(
  2. 'name' => 'baigo',
  3. 'email' => 'baigo@qq.com'
  4. );
  5. $validate = Loader::validate('User');
  6. if(!$validate->verify($data)){
  7. print_r($validate->getMessage());
  8. }

验证类 ginkgo\Validate 内置了如下类的实例:

  1. class Validate {
  2. // ginkgo\Lang 的实例
  3. protected $obj_lang;
  4. }

验证器初始化

验证器同样支持初始化,与控制器的初始化类似,可以定义验证器初始化方法 v_init,具体如下

  1. namespace app\validate\index;
  2. use ginkgo\Validate;
  3. class Index extends Validate {
  4. //自定义初始化
  5. function v_init() {
  6. }
  7. }

分层验证器

ginkgo 支持验证器的分层,其分层方式与 分层控制器 类似。

在控制器中实例化验证器时,系统会默认实例化当前模块层的验证器。例如 index 模块下的 User 控制器中实例化某个验证器:

  1. namespace app\ctrl\index;
  2. use ginkgo\Loader;
  3. class User {
  4. function __construct() { //构造函数
  5. $this->vld_user = Loader::validate('User');
  6. }
  7. }

验证器的实际位置

app\validate\index\user.vld.php

定义如下

  1. namespace app\validate\index;
  2. use ginkgo\Validate;
  3. class User extends Validate {
  4. }

还可以定义分层验证器。

例如,定义 index 模块 event 层下的 Blog 验证器如下:

  1. namespace app\validate\index\event;
  2. use ginkgo\Validate;
  3. class Blog extends Validate {
  4. }

验证器的实际位置是

app/validate/index/event/blog.vld.php

定义完成后,就可以用下面的方式实例化验证器了:

  1. use ginkgo\Loader
  2. $event = Loader::validate('Blog', 'event');

跨模块调用

验证器支持跨模块调用,例如:

  1. use ginkgo\Loader
  2. $event = Loader::validate('Blog', '', 'admin');

验证器的实际位置是

app/validate/admin/blog.vld.php

表示实例化 admin 模块的 Blog 验证器类

  1. use ginkgo\Loader
  2. $event = Loader::validate('Blog', 'event', 'admin');

验证器的实际位置是

app/validate/admin/event/blog.vld.php