ThinkPHP3.2基础教程(34)--URL操作

URL大小写

  系统默认的规范是根据URL里面的模块名、控制器名来定位到具体的控制器类的,从而执行控制器类的操作方法。

  如果是Windows环境,无论大小写如何都能定位到,如果在Linux环境下面,一旦大小写不一致,就会发生URL里面使用小写模块名不能找到模块类的情况。但是系统本身提供了一个不区分URL大小写的解决方案,可以通过配置简单实现。

  只要在项目配置中,增加:

‘URL_CASE_INSENSITIVE‘ =>true

  配置好后,即使是在Linux环境下面,也可以实现URL访问不再区分大小写了。

  这里需要注意一个地方,一旦开启了不区分URL大小写后,如果我们要访问类似UserTypeController的控制器,那么正确的URL访问应该是:

// 正确的访问地址
http://serverName/index.php/home/user_type/index
// 错误的访问地址(linux环境下)
http://serverName/index.php/home/usertype/index

  如果设置

‘URL_CASE_INSENSITIVE‘ =>false

  URL就又变成: http://serverName/index.php/Home/UserType/add

  注意:URL不区分大小写并不会改变系统的命名规范,并且只有按照系统的命名规范后才能正确的实现URL不区分大小写。

伪静态

  URL伪静态通常是为了满足更好的SEO效果,ThinkPHP支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行。例如,我们设置

    ‘URL_HTML_SUFFIX‘=>‘shtml‘

  我们就可以把下面的URL http://serverName/Home/Blog/read/id/1 变成 http://serverName/Home/Blog/read/id/1.shtml,后者更具有静态页面的URL特征,但是具有和前面的URL相同的执行效果,并且不会影响原来参数的使用。

  默认情况下,伪静态的设置为html,如果我们设置伪静态后缀为空,

‘URL_HTML_SUFFIX‘=>‘‘

  则可以支持所有的静态后缀,并且会记录当前的伪静态后缀到常量 __EXT__ ,但不会影响正常的页面访问。

  如果希望支持多个伪静态后缀,可以直接设置如下:

// 多个伪静态后缀设置 用|分割
‘URL_HTML_SUFFIX‘ => ‘html|shtml|xml‘ 

  可以设置禁止访问的URL后缀,例如:

‘URL_DENY_SUFFIX‘ => ‘pdf|ico|png|gif|jpg‘, // URL禁止访问的后缀设置

  注意:URL_DENY_SUFFIX的优先级比URL_HTML_SUFFIX要高。

URL生成

  为了配合所使用的URL模式,我们需要能够动态的根据当前的URL设置生成对应的URL地址,为此,ThinkPHP内置提供了U方法,用于URL的动态生成,可以确保项目在移植过程中不受环境的影响。

  定义规则

    U方法的定义规则如下(方括号内参数根据实际应用决定):

    U(‘地址表达式‘,[‘参数‘],[‘伪静态后缀‘],[‘显示域名‘])

    地址表达式

      地址表达式的格式定义如下:

[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...

      如果不定义模块的话 就表示当前模块名称,下面是一些简单的例子:

U(‘User/add‘) // 生成User控制器的add操作的URL地址
U(‘Blog/read?id=1‘) // 生成Blog控制器的read操作 并且id为1的URL地址
U(‘Admin/User/select‘) // 生成Admin模块的User控制器的select操作的URL地址

    参数

      U方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:

U(‘Blog/cate‘,array(‘cate_id‘=>1,‘status‘=>1))
U(‘Blog/cate‘,‘cate_id=1&status=1‘)
U(‘Blog/cate?cate_id=1&status=1‘)

      三种方式是等效的,都是生成Blog控制器的cate操作 并且cate_id为1 status为1的URL地址。但是不允许使用下面的定义方式来传参数。

U(‘Blog/cate/cate_id/1/status/1‘);

  自动识别

    根据项目的不同URL设置,同样的U方法调用可以智能地对应产生不同的URL地址效果,例如针对:

U(‘Blog/read?id=1‘);
http://serverName/index.php?m=Blog&a=read&id=1 //URL设置为普通模式
http://serverName/index.php/Home/Blog/read/id/1 //URL设置为PATHINFO模式
http://serverName/Home/Blog/read/id/1 //URL设置为REWRITE模式
http://serverName/Home/Blog/read/id/1.html //URL设置了REWRITE模式,并且设置了伪静态后缀为.html

    如果开启了URL_CASE_INSENSITIVE,则会统一生成小写的URL地址。

  生成路由地址

    U方法还可以支持路由,如果我们定义了一个路由规则为:

 ‘news/:id\d‘=>‘News/read‘

    那么可以使用

U(‘/news/1‘);

    最终生成的URL地址是:

http://serverName/index.php/Home/news/1

    注意:如果你是在模板文件中直接使用U方法的话,需要采用 {:U(‘参数1‘, ‘参数2‘…)} 的方式。

  域名支持

    如果你的应用涉及到多个子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如:

U(‘Blog/[email protected]‘,‘id=1‘);

    @后面传入需要指定的域名即可。系统会自动判断当前是否SSL协议,生成https://。

    此外,U方法的第4个参数如果设置为true,表示自动识别当前的域名,并且会自动根据子域名部署设置APP_SUB_DOMAIN_DEPLOY和APP_SUB_DOMAIN_RULES自动匹配生成当前地址的子域名。

  锚点支持

    U函数可以直接生成URL地址中的锚点,例如:

U(‘Blog/read#comment?id=1‘);

    生成的URL地址可能是:

http://serverName/index.php/Home/Blog/read/id/1#comment

    

时间: 2024-10-29 19:05:56

ThinkPHP3.2基础教程(34)--URL操作的相关文章

ThinkPHP3.2基础教程(19)--模型-CURD操作-数据创建

ThinkPHP提供了灵活和方便的数据操作方法,对数据库操作的四个基本操作(CURD):创建.更新.读取和删除的实现是最基本的,也是必须掌握的,在这基础之上才能熟悉更多实用的数据操作方法. CURD操作通常是可以和连贯操作配合完成的. 数据创建 在进行数据操作之前,我们往往需要手动创建需要的数据,例如对于提交的表单数据: // 获取表单的POST数据 $data['name'] = $_POST['name']; $data['email'] = $_POST['email']; // 更多的表

ThinkPHP3.2基础教程(36)--控制器-前置和后置操作

前置和后置操作指的是在执行某个操作方法之前和之后会自动调用的方法,不过仅对访问控制器有效. 其他的分层控制器层和内部调用控制器的情况下前置和后置操作是无效的. 系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的定义方式如下: <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller{ //前置操作方法 public functio

ThinkPHP3.2基础教程(21)--模型-CURD操作-数据读取

在ThinkPHP中读取数据的方式很多,通常分为读取数据.读取数据集和读取字段值. 数据查询方法支持的连贯操作方法有: 连贯操作 作用 支持的参数类型 where 用于查询或者更新条件的定义 字符串.数组和对象 table 用于定义要操作的数据表名称 字符串和数组 alias 用于给当前数据表定义别名 字符串 field 用于定义要查询的字段(支持字段排除) 字符串和数组 order 用于对结果排序 字符串和数组 group 用于对查询的group支持 字符串 having 用于对查询的havi

ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入

ThinkPHP的数据写入操作使用add方法,使用示例如下: $User = M("User"); // 实例化User对象 $data['name'] = 'ThinkPHP'; $data['email'] = '[email protected]'; $User->add($data); 如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作: add($data='',$options=array(),$replace=false) 其中add方法增加$repla

ThinkPHP3.2基础教程(37)--控制器-Action参数绑定

参数绑定是通过直接绑定URL地址中的变量作为操作方法的参数,可以简化方法的定义甚至路由的解析. 参数绑定功能默认是开启的,其原理是把URL中的参数(不包括模块.控制器和操作名)和操作方法中的参数进行绑定. 要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置: 'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数 参数绑定有两种方式:按照变量名绑定和按照变量顺序绑定. 按变量名绑定 默认的参数绑定方式是按照变量名进行绑定,例如,我们给Bl

ThinkPHP3.2基础教程(33)--路由功能

利用路由功能,可以让你的URL地址更加简洁和优雅.ThinkPHP支持对模块的URL地址进行路由操作.路由功能是针对PATHINFO模式或者兼容URL而设计的,暂时不支持普通URL模式. 路由解析的最终结果通常是把URL地址解析到当前模块的某个控制器下的操作方法(不能跨模块路由),在特殊的情况下,也可以跳转到外部地址或者执行闭包函数. 注意:3.2版本的路由定义是针对模块定义的,所以路由是在模块配置文件中定义的,并且模块本身不能被路由(模块名的路由使用模块映射或者采用域名部署即可). 路由定义

ThinkPHP3.2基础教程(6)--模型-字段定义

字段定义 通常每个模型类是操作某个数据表,在大多数情况下,系统会自动获取当前数据表的字段信息. 系统会在模型首次实例化的时候自动获取数据表的字段信息(而且只需要一次,以后会永久缓存字段信息,除非设置不缓存或者删除),如果是调试模式则不会生成字段缓存文件,则表示每次都会重新获取数据表字段信息. 字段缓存保存在Runtime/Data/_fields/ 目录下面,缓存机制是每个模型对应一个字段缓存文件(注意:并非每个数据表对应一个字段缓存文件),命名格式是: 数据库名.模型名(小写).php dem

【jquery基础教程】jquery事件及操作大汇总

在学习Javascript语言中,有一个优秀的Javascript库是大家都会遇到的--jquery,今天小编汇总了jquery事件及操作,现在一起来看看jquery基础教程吧! 事件 bind()        向匹配元素附加一个或更多事件处理器 blur( )        触发.或将函数绑定到指定元素的 blur 事件 change()        触发.或将函数绑定到指定元素的 change 事件 click()        触发.或将函数绑定到指定元素的 click 事件 dblc

安装使用Mongoose配合Node.js操作MongoDB的基础教程【转载】

这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下 安装mongoose 使用express准备一个TestMongoDB项目,命令序列如下: express TestMongoDB cd TestMongoDB npm install 执行完上面的命令后,使用下面的命令安装mongoose: npm install mongoose -