用户
 找回密码
 入住 CI 中国社区
搜索
查看: 1570|回复: 0
收起左侧

[HELP] Router类的_set_routing方法中使用URI类的_filter_uri方法的问题

[复制链接]
发表于 2014-1-8 11:19:08 | 显示全部楼层 |阅读模式
Router类的_set_routing方法
PHP复制代码
 
function _set_routing()
        {
                // Are query strings enabled in the config file?  Normally CI doesn't utilize query strings
                // since URI segments are more search-engine friendly, but they can optionally be used.
                // If this feature is enabled, we will gather the directory/class/method a little differently
                $segments = array();
                if ($this->config->item('enable_query_strings') === TRUE AND isset($_GET[$this->config->item('controller_trigger')]))
                {
                        if (isset($_GET[$this->config->item('directory_trigger')]))
                        {
                                $this->set_directory(trim($this->uri->_filter_uri($_GET[$this->config->item('directory_trigger')])));
                                $segments[] = $this->fetch_directory();
                        }
 
                        if (isset($_GET[$this->config->item('controller_trigger')]))
                        {
                                $this->set_class(trim($this->uri->_filter_uri($_GET[$this->config->item('controller_trigger')])));
                                $segments[] = $this->fetch_class();
                        }
 
                        if (isset($_GET[$this->config->item('function_trigger')]))
                        {
                                $this->set_method(trim($this->uri->_filter_uri($_GET[$this->config->item('function_trigger')])));
                                $segments[] = $this->fetch_method();
                        }
                }
 
                // Load the routes.php file.
                if (defined('ENVIRONMENT') AND is_file(APPPATH.'config/'.ENVIRONMENT.'/routes.php'))
                {
                        include(APPPATH.'config/'.ENVIRONMENT.'/routes.php');
                }
               
                elseif (is_file(APPPATH.'config/routes.php'))
                {
                        include(APPPATH.'config/routes.php');
                }
 
                $this->routes = ( ! isset($route) OR ! is_array($route)) ? array() : $route;
                unset($route);
 
                // Set the default controller so we can display it in the event
                // the URI doesn't correlated to a valid controller.
                $this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') ? FALSE : strtolower($this->routes['default_controller']);
 
                // Were there any query string segments?  If so, we'll validate them and bail out since we're done.
                if (count($segments) > 0)
                {
                        return $this->_validate_request($segments);
                }
 
                // Fetch the complete URI string
                $this->uri->_fetch_uri_string();
 
                // Is there a URI string? If not, the default controller specified in the "routes" file will be shown.
                if ($this->uri->uri_string == '')
                {
                        return $this->_set_default_controller();
                }
 
                // Do we need to remove the URL suffix?
                $this->uri->_remove_url_suffix();
 
                // Compile the segments into an array
                $this->uri->_explode_segments();
 
                // Parse any custom routing that may exist
                $this->_parse_routes();
 
                // Re-index the segment array so that it starts with 1 rather than 0
                $this->uri->_reindex_segments();
        }
 
复制代码

它先判断了$this->config->item('enable_query_strings') === TRUE的时候才获取并过滤$_GET[$this->config->item('directory_trigger')];过滤调用了URI类的_filter_uri方法($this->uri->_filter_uri),但是这个方法在过滤的时候又必须满足$this->config->item('enable_query_strings') == FALSE,这不是和最开始的为TRUE相反了吗?这是为什么?

本版积分规则