Exemple #1
0
 /**
  * 远程调用模块的操作方法 参数格式 [模块/控制器/]操作
  * @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);
     }
 }
Exemple #2
0
 /**
  * 验证字段规则
  * @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;
 }