/** * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作 * @param string $url 调用地址 * @param string|array $vars 调用参数 支持字符串和数组 * @param string $layer 要调用的控制层名称 * @return mixed */ public static function action($url, $vars = [], $layer = CONTROLLER_LAYER) { $info = pathinfo($url); $action = $info['basename']; $module = '.' != $info['dirname'] ? $info['dirname'] : CONTROLLER_NAME; $class = self::controller($module, $layer); if ($class) { if (is_scalar($vars)) { if (strpos($vars, '=')) { parse_str($vars, $vars); } else { $vars = [$vars]; } } return App::invokeMethod([$class, $action . Config::get('action_suffix')], $vars); } }
/** * 验证字段规则 * @access public * @param mixed $value 字段值 * @param mixed $val 验证规则 * @param array $data 数据 * @return string|true */ protected function checkValidate($value, $val, &$data) { $rule = $val[0]; $msg = $val[1]; $type = isset($val[2]) ? $val[2] : 'regex'; $options = isset($val[3]) ? $val[3] : []; if ($rule instanceof \Closure) { $type = 'callback'; } switch ($type) { case 'callback': if (is_array($rule) || is_string($rule) && strpos($rule, '::')) { $result = App::invokeMethod($rule, [$value, &$data]); } else { $result = App::invokeFunction($rule, [$value, &$data]); } break; case 'behavior': // 行为验证 $result = Hook::exec($rule, '', $data); break; case 'filter': // 使用filter_var验证 $result = filter_var($value, is_int($rule) ? $rule : filter_id($rule), $options); break; case 'confirm': $result = $value == $data[$rule]; break; case 'in': case 'notin': $range = is_array($rule) ? $rule : explode(',', $rule); $result = 'in' == $type ? in_array($value, $range) : !in_array($value, $range); break; case 'between': // 验证是否在某个范围 // 验证是否在某个范围 case 'notbetween': // 验证是否不在某个范围 if (is_string($rule)) { $rule = explode(',', $rule); } list($min, $max) = $rule; $result = 'between' == $type ? $value >= $min && $value <= $max : $value < $min || $value > $max; break; case 'regex': default: if (isset($this->rule[$rule])) { $rule = $this->rule[$rule]; } $result = 1 === preg_match('/^' . $rule . '$/', (string) $value); break; } // 验证失败返回错误信息 return false === $result ? $msg : true; }