CodeIgniter的URL URI

************************

URI,是uniform resource identifier,统一资源标识符,用来唯一的标识一个资源。而URL是uniform resource locator,统一资源定位器,它是一种具体的URI,即URL可以用来标识一个资源,而且还指明了如何locate这个资源。而URN,uniform resource name,统一资源命名,是通过名字来标识资源。

URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,所以,是绝对的,而通常说的relative URL,则是针对另一个absolute URL,本质上还是绝对的。

************************

在config.php中设置了

$config['url_suffix'] = '.html';
这个配置添加之后,用到site_url('aa')方法返回的url全部是 http://www.a.com/aa.html
自动添加了.html后缀
可以改写成.htm

但要注意对于分页类的影响;

************************

 

loaclhost/index.php/products/shoes/sandals/123

这个是从入口文件,index.php出发,找到products控制器,然后控制器里面的一个shoes的方法,再在后头里面传入两个参数sandals和123;

<?php 
class Products extend CI_Controller
{
      function shoes($sandals,$num)
      {
           echo $sandals;
           echo $num;
      }
}


?>

最终输出俩个参数的值。

这个是常见的URL的传参,还有CI设置routes的URI路由设置

是这样:localhost/products/1/

如果你使用了URI路由,传递到你的方法的参数将是路由后的参数。

最简单的一个是:$route['default_controller']='products'; 就是默认访问的路径是控制器products

被重写的方法(通常是 URI 的第二段)将被作为参数传递到 _remap() 方法:

public function _remap($method)
{
    if ($method === 'some_method')  //通常是 URI 的第二段
    {
        $this->$method();
    }
    else
    {
        $this->default_method();
    }
}

{以下引用开发文档}

一般情况下,一个 URL 字符串和它对应的控制器中类和方法是一一对应的关系。 URL 中的每一段通常遵循下面的规则:

localhost/class/function/id/

但是有时候,你可能想改变这种映射关系,调用一个不同的类和方法,而不是 URL 中对应的那样。

例如,假设你希望你的 URL 变成下面这样:

localhost/product/1/
localhost/product/2/
localhost/product/3/
localhost/product/4/

URL 的第二段通常表示方法的名称,但在上面的例子中,第二段是一个商品 ID , 为了实现这一点,CodeIgniter 允许你重新定义 URL 的处理流程。

先来看一个典型的使用通配符的路由规则如下:(config/config.php)

$route['product/:num'] = 'catalog/product_lookup';

在一个路由规则中,数组的键表示要匹配的 URI ,而数组的值表示要重定向的位置。 上面的例子中,如果 URL 的第一段是字符串 "product" ,第二段是个数字,那么, 将调用 "catalog" 类的 "product_lookup" 方法。

方法名之后的所有其他段将作为 _remap() 方法的第二个参数,它是可选的。这个参数可以使用 PHP 的 call_user_func_array() 函数来模拟 CodeIgniter 的默认行为。

例如:

public function _remap($method, $params = array())
{
    $method = 'process_'.$method;
	//​boolmethod_exists( object object, string method_name )如果 method_name 所指的方法在 object 
//所指的对象类中已定义,则返回TRUE,否则返回FALSE。
    if (method_exists($this, $method))  //检查类的方法是否存在
    {
        return call_user_func_array(array($this, $method), $params);
    }
    show_404();
}

_remap自定义$route[]

call_user_func_array - 用一个数组作为参数调用一个回调函数.返回值为回调函数执行的结果或者为false(回调函数执行有error时)

很多时候:

1、你要调用的函数名是未知的
2、要调用函数的参数类型及个数也是未知的

3、你可以调用静态函数
因为未知,所以得用call_user_func_array这样的函数。

 

转载于:https://my.oschina.net/u/3585897/blog/1580175

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值