************************
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这样的函数。