Exemplo n.º 1
0
Arquivo: core.php Projeto: pihizi/qf
 static function default_dispatcher()
 {
     if (Input::$AJAX && Input::$AJAX['widget']) {
         $widget = Widget::factory(Input::$AJAX['widget']);
         $method = 'on_' . (Input::$AJAX['object'] ?: 'unknown') . '_' . (Input::$AJAX['event'] ?: 'unknown');
         if (method_exists($widget, $method)) {
             Event::bind('system.output', 'Output::AJAX');
             $widget->{$method}();
         }
         return;
     }
     $args = Input::args();
     $default_page = Config::get('system.default_page');
     if (!$default_page) {
         $default_page = 'index';
     }
     //从末端开始尝试
     /*
     	home/page/edit.1
     	home/page/index.php Index_Controller::edit(1)
     	home/page/index.php Index_Controller::index('edit', 1)
     	home/page.php		Page_Controller::edit(1)
     	home/page.php		Page_Controller::index('edit', 1)
     */
     $file = end($args);
     if (!preg_match('/[^\\\\]\\./', $file)) {
         //有非法字符的只能是参数
         $path = implode('/', $args);
         // home/page/edit/index => index, NULL
         $candidates[($path ? $path . '/' : '') . $default_page] = array($default_page, NULL);
         $candidates[$path] = array($file, NULL);
         // home/page/edit => edit, NULL
     }
     if ($args) {
         $params = array_pop($args);
         $file = $args ? end($args) : $default_page;
         $path = $args ? implode('/', $args) : $default_page;
         $candidates[$path] = array($file, $params);
         // home/page.php => page, edit|1
     } else {
         $candidates[$default_page] = array($default_page, NULL);
     }
     $class = NULL;
     foreach ($candidates as $path => $candidate) {
         if (Core::load(CONTROLLER_BASE, $path)) {
             $class = str_replace('/', '_', $path);
             $params = array();
             if (preg_match_all('/(.*?[^\\\\])\\./', $candidate[1] . '.', $parts)) {
                 foreach ($parts[1] as $part) {
                     $params[] = strtr($part, array('\\.' => '.'));
                 }
             }
             Config::set('system.controller_path', $path);
             Config::set('system.controller_class', $class);
             break;
         }
     }
     if (!$class) {
         URI::redirect('error/404');
     }
     if (Input::$AJAX) {
         $class .= AJAX_SUFFIX;
         if (!class_exists($class, false)) {
             Core::load(CONTROLLER_BASE, 'ajax');
             $class = 'AJAX' . CONTROLLER_SUFFIX;
         }
         $controller = new $class();
         $object = Input::$AJAX['object'];
         $event = Input::$AJAX['event'];
         $method = $params[0];
         if (!$method || $method[0] == '_') {
             $method = 'index_';
         }
         $method .= '_' . ($object ? $object . '_' : '') . $event;
         if (method_exists($controller, $method)) {
             array_shift($params);
         } else {
             $method = 'index_' . ($object ? $object . '_' : '') . $event;
             if (!method_exists($controller, $method)) {
                 $method = NULL;
             }
         }
         if ($method) {
             Controller::$CURRENT = $controller;
             Config::set('system.controller_method', $method);
             Config::set('system.controller_params', $params);
             $controller->_before_call($method, $params);
             call_user_func_array(array($controller, $method), $params);
             $controller->_after_call($method, $params);
         }
     } else {
         $class .= CONTROLLER_SUFFIX;
         $controller = new $class();
         $method = $params[0];
         if ($method && $method[0] != '_' && method_exists($controller, $method)) {
             array_shift($params);
         } elseif ($method && $method[0] != '_' && method_exists($controller, 'do_' . $method)) {
             $method = 'do_' . $method;
             array_shift($params);
         } else {
             $method = 'index';
         }
         Controller::$CURRENT = $controller;
         Config::set('system.controller_method', $method);
         Config::set('system.controller_params', $params);
         $controller->_before_call($method, $params);
         call_user_func_array(array($controller, $method), $params);
         $controller->_after_call($method, $params);
     }
 }
Exemplo n.º 2
0
Arquivo: input.php Projeto: pihizi/qf
 static function setup()
 {
     if (function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc() || ini_get('magic_quotes_sybase') && strtolower(ini_get('magic_quotes_sybase')) != "off") {
         Input::stripslashes_deep($_GET);
         Input::stripslashes_deep($_POST);
         Input::stripslashes_deep($_COOKIE);
     }
     $route = $_SERVER['PATH_INFO'];
     if (!$route) {
         $route = $_SERVER['ORIG_PATH_INFO'];
     }
     $route = preg_replace('/^[\\/ ]*|[\\/ ]*$|' . preg_quote(Config::get('system.url_suffix')) . '$/iu', '', $route);
     Input::$route = $route;
     $args = array();
     if (preg_match_all('/(.*?[^\\\\])\\//', $route . '/', $parts)) {
         foreach ($parts[1] as $part) {
             $args[] = strtr($part, array('\\/' => '/'));
         }
     }
     Input::$args = $args;
     Input::$get = $_GET;
     Input::$form = array_merge($_POST, $_GET);
     Input::$files = $_FILES;
     $query = $_GET;
     Input::$url = URI::url(Input::$route, $query);
     if ($_POST['_ajax']) {
         /*
         $data=json_decode($_POST['_data'], TRUE);
         if($data){
         	$new_data=array();
         	foreach($data as $k=>$v){
         		if(preg_match('/^(\S+?)(\[.+\])$/', $k, $p1)){
         			$key=$p1[1];
         			preg_match_all('/\[(\S+?)\]/', $p1[2], $p2);
         			while(NULL !== ($p=array_pop($p2[1]))){
         				$v=array($p=>$v);
         			}
         			if(is_array($new_data[$key]) && is_array($v)){
         				Misc::array_merge_deep($new_data[$key], $v);
         			} else {
         				$new_data[$key]=$v;
         			}
         		}else{
         			$new_data[$k] = $v;
         		}
         	}
         	Input::$form=array_merge(Input::$form, $new_data);
         }
         */
         Input::$AJAX['widget'] = $_POST['_widget'];
         Input::$AJAX['object'] = $_POST['_object'];
         Input::$AJAX['event'] = $_POST['_event'];
         Input::$AJAX['mouse'] = $_POST['_mouse'];
         Input::$AJAX['view'] = $_POST['_view'];
         unset(Input::$form['_ajax']);
         unset(Input::$form['_data']);
         unset(Input::$form['_widget']);
         unset(Input::$form['_object']);
         unset(Input::$form['_event']);
         unset(Input::$form['_mouse']);
         unset(Input::$form['_view']);
     }
 }