ValidateBehavior.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: NODELOG
  5. * Date: 16/6/24
  6. * Time: 下午2:40
  7. */
  8. namespace api\common\behaviors;
  9. use yii\base\Behavior;
  10. use yii\base\DynamicModel;
  11. use yii\validators\Validator;
  12. use yii\base\InvalidConfigException;
  13. /**
  14. * 验证参数
  15. * Class ValidateBehavior
  16. * @package api\common\behaviors
  17. */
  18. class ValidateBehavior extends Behavior
  19. {
  20. public function validate($data, $rules)
  21. {
  22. $_attributes = [];
  23. foreach ($rules as $rule) {
  24. if (is_array($rule[0])) {
  25. $_attributes = array_merge($_attributes, $rule[0]);
  26. } else {
  27. $_attributes[] = $rule[0];
  28. }
  29. }
  30. $model = new DynamicModel($_attributes);
  31. if (!empty($rules)) {
  32. $validators = $model->getValidators();
  33. foreach ($rules as $rule) {
  34. if ($rule instanceof Validator) {
  35. $validators->append($rule);
  36. } elseif (is_array($rule) && isset($rule[0], $rule[1])) { // attributes, validator type
  37. $validator = Validator::createValidator($rule[1], $model, (array) $rule[0], array_slice($rule, 2));
  38. $validators->append($validator);
  39. } else {
  40. throw new InvalidConfigException('Invalid validation rule: a rule must specify both attribute names and validator type.');
  41. }
  42. }
  43. }
  44. $model->attributes = $data;
  45. $model->validate();
  46. return $model;
  47. }
  48. }