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;

1<?php 2class Products extend CI_Controller 3{ 4 function shoes($sandals,$num) 5 { 6 echo $sandals; 7 echo $num; 8 } 9} 10 11 12?>

最终输出俩个参数的值。

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

是这样:localhost/products/1/

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

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

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

1public function _remap($method) 2{ 3    if ($method === 'some_method')  //通常是 URI 的第二段 4    { 5        $this->$method(); 6    } 7    else 8    { 9        $this->default_method(); 10    } 11}

{以下引用开发文档}

一般情况下,一个 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 的默认行为。

例如:

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

_remap自定义$route[]

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

很多时候:

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )