zoukankan      html  css  js  c++  java
  • 重写site_url,让ci支持query_string的地址生成方式

    昨晚搞得很郁闷,好好的项目,放到客户的服务器居然404,发现应该是服务器不支持pathinfo方式,但至今也没有找到确切的原因(毕竟也用的apache,怎会不支持pathinfo?.htaccess里面配置AcceptPathInfo也不行),在网上也找了,居然也有人重写的,不过他重写的是Config类,而且还重写了其他几个类,汗。。,搞不懂,ci支持helper的优先级的嘛,方便就一个函数搞定。。【后来发现,form_validation.php配置文件,他也是要通过URI获取来的rsegment来判断uri合法性,所以没办法,使用这个后,验证表单时要加上配置文件所指定的验证规则:如$this->form_validation->run('login/do_login')】

    自己application下的common_helper.php:

    /**
     * zcs=重写ci的site_url
     * [开启do_enable_query_strings配置]
     * 支持原本的index.php/xx/xx/p1/v1/p2/v2方式转换为index.php?c=xx&m=xx&p1=v1&p2=v2
     * @param $uri
     * @return unknown_type
     */
    function site_url($uri = ''){
    	$CI =& get_instance();
    	if (is_array($uri) || $uri == '' || !$CI->config->item('do_enable_query_strings')){
    		return $CI->config->site_url($uri);
    	}else{
    		//zcs=>解析PATHINFO方式为正常方式,ci用uri传递函数参数的方式则不可取了
    		$uri = trim($uri, '/');
    		$uri_arr = explode('/', $uri);
    		$param_len = count($uri_arr);
    		$c = '?'.$CI->config->item('controller_trigger').'='.$uri_arr[0];
    		$m = (($param_len >= 2) ? '&'.$CI->config->item('function_trigger').'='.$uri_arr[1] : '');
    		$uri = $c.$m;
    		for ($i = 2; $i < $param_len; $i++){
    			$uri .= (($i%2) ? '=' : '&');
    			$uri .= $uri_arr[$i];
    		}
    		return $CI->config->slash_item('base_url').$CI->config->item('index_page').trim($uri, '/');
    	}
    }
    

    另外用到了我自己的一个配置项,方便配置这种特有的方式,避免冲突:

    [config.php]

    /*
    |--------------------------------------------------------------------------
    | 将所有site_url中使用的index.php/xx/xx/p1/v1/p2/v2方式转换为?c=xx&m=xx&p1=v1&p2=v2
    |--------------------------------------------------------------------------
    |1、此配置依赖于common_helper.php中重写的site_url函数
    |2、转换后需要配置enable_query_strings开启,否则ci不允许
    |
    */
    $config['do_enable_query_strings']	= TRUE;
    

    然后可以方便地转换了,不过ci的uri传函数参数方式就不行了,个人觉得也最好不要使用这种方式,直接还是用原始的GET传参吧,毕竟这种有局限

  • 相关阅读:
    Optional的使用
    Spring Boot 传送门
    MP(MyBatis-Plus)实现乐观锁更新功能
    实现数据逻辑删除的一种方案
    凹凸技术揭秘 · 基础服务体系 · 构筑服务端技术中枢
    凹凸技术揭秘 · 夸克设计资产 · 打造全矩阵优质物料
    凹凸技术揭秘·羚珑页面可视化·成长蜕变之路
    90%的开发都没搞懂的CI和CD!
    Devops与敏捷二者能否结合?
    优质单元测试的十大标准,你有遵循吗?
  • 原文地址:https://www.cnblogs.com/ppoo24/p/1895951.html
Copyright © 2011-2022 走看看