控制器验证

如果需要在控制器中进行验证,且继承了 ginkgo\Ctrl 类,可以调用控制器类提供的 validate 方法进行验证,如:

  1. $data = array(
  2. 'name' => 'baigo',
  3. 'email' => 'baigo@qq.com',
  4. );
  5. $rule = array(
  6. 'name' => array(
  7. 'require' => true,
  8. 'max' => 25,
  9. ),
  10. 'email' => array(
  11. 'format' => 'email',
  12. ),
  13. );
  14. $result = $this->validate($data, $rule);
  15. if($result !== true){
  16. // 验证失败 输出错误信息
  17. print_r($result);
  18. }

如果定义了验证器的话,例如:

  1. namespace app\index\validate;
  2. use ginkgo\Validate;
  3. class User extends Validate {
  4. protected $rule = array(
  5. 'name' => array(
  6. 'require' => true,
  7. 'max' => 25,
  8. ),
  9. 'email' => array(
  10. 'format' => 'email',
  11. ),
  12. );
  13. protected $scene = array(
  14. 'add' => array(
  15. 'name',
  16. 'email',
  17. ),
  18. 'edit' => array(
  19. 'email'
  20. ),
  21. );
  22. }

控制器中的验证代码可以简化为:

  1. $result = $this->validate($data, 'user');
  2. if($result !== true){
  3. // 验证失败 输出错误信息
  4. print_r($result);
  5. }

如果要使用场景,可以使用:

  1. $result = $this->validate($data, 'user', 'edit');
  2. if($result !== true){
  3. // 验证失败 输出错误信息
  4. print_r($result);
  5. }

如果控制器和验证器位于同一模块,且同名,同时动作名与场景名相同,还可以进一步简化:

  1. namespace app\ctrl\index;
  2. use ginkgo\Ctrl;
  3. use ginkgo\Loader;
  4. class User extends Ctrl {
  5. function edit() {
  6. $result = $this->validate($data);
  7. if($result !== true){
  8. // 验证失败 输出错误信息
  9. print_r($result);
  10. }
  11. }
  12. }

如果要指定场景:

  1. namespace app\ctrl\index;
  2. use ginkgo\Loader;
  3. class User {
  4. function edit() {
  5. $result = $this->validate($data, '', 'edit');
  6. if($result !== true){
  7. // 验证失败 输出错误信息
  8. print_r($result);
  9. }
  10. }
  11. }

如果不使用场景:

  1. namespace app\ctrl\index;
  2. use ginkgo\Loader;
  3. class User {
  4. function edit() {
  5. $result = $this->validate($data, '', false);
  6. if($result !== true){
  7. // 验证失败 输出错误信息
  8. print_r($result);
  9. }
  10. }
  11. }