ThinkPHP 学习笔记

本文介绍了如何通过配置URL模式和使用路由规则实现更灵活的URL结构。包括不同URL模式的设置方法、.htaccess文件配置、路由规则定义及参数绑定等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读取配置

获取已经设置的参数值:C('参数名称')

  $model = C('URL_MODEL');

   $model = C('url_model');

C方法也可以用于读取二维配置:

   //获取用户配置中的用户类型设置   
  1. C('USER_CONFIG.USER_TYPE');

    因为配置参数是全局有效的,因此C方法可以在任何地方读取任何配置,即使某个设置参数已经生效过期了

*** 注意:配置参数名称中不能含有 “.” 和特殊字符,允许字母、数字和下划线。

URL模式

框架内置了一个配置参数用于解决URL大小写的问题:  'URL_CASE_INSENSITIVE' => true, 

URL模式 URL_MODEL设置
普通模式 0
PATHINFO模式 1
REWRITE模式 2
兼容模式 3

   普通模式也就是传统的GET传参方式来指定当前访问的模块和操作  m参数表示模块,c参数表示控制器,a参数表示操作(当然这些参数都是可以配置的),后面的表示其他GET参数

   PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。

   REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。

.htaccess 文件:

<IfModule mod_rewrite.c>

    RewriteEngine on

    RewriteCond %{REQUEST_FILENAME} !-d

    RewriteCond %{REQUEST_FILENAME} !-f

    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

</IfModule>


兼容模式是用于不支持PATHINFO的特殊环境,

.htaccess 文件:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?s=/$1 [QSA,PT,L]
</IfModule>


路由定义

//开启路由

'URL_ROUTER_ON' => true,

在模块的配置文件中使用URL_ROUTE_RULES参数进行配置,配置格式是一个数组,每个元素都代表一个路由规则.

'URL_ROUTE_RULES'=>array(
    'news/:year/:month/:day' => array('News/archive', 'status=1'),
    'news/:id' => 'News/read',
    'news/read/:id' => '/news/:1',
),

路由定义:

路由规则的定义格式为: '路由表达式'=>'路由地址和传入参数'

或者:array('路由表达式','路由地址','传入参数');

路由表达式:

路由表达式包括规则路由和正则路由的定义表达式,只能使用字符串。

表达式 示例
正则表达式 /^blog\/(\d+)$/
规则表达式 blog/:id


路由参数:
当路由地址采用数组方式定义的时候,还可以传入额外的路由参数。

实例化控制器:

访问控制器的实例化通常是自动完成的,系统会根据URL地址解析出访问的控制器名称自动实例化,并且调用相关的操作方法。

默认情况下,A方法实例化的是默认控制器层(Controller),如果你要实例化其他的分层控制器的话,可以使用:


    // 假设当前模块是Home模块

    // 实例化Event控制器

    $User = A('User','Event');

    $Blog = A('Admin/Blog','Event');

Action参数绑定

要启用参数绑定功能,首先确保你开启了URL_PARAMS_BIND设置:

    'URL_PARAMS_BIND' => true, // URL变量绑定到操作方法作为参数

1 按变量名绑定:

    默认的参数绑定方式是按照变量名进行绑定

2 按变量顺序绑定

    这种情况下URL地址中的参数顺序非常重要,不能随意调整。要按照变量顺序进行绑定,必须先设置URL_PARAMS_BIND_TYPE为1

'URL_PARAMS_BIND_TYPE' => 1, // 设置参数绑定按照变量顺序绑定

关闭参数绑定功能 : 'URL_PARAMS_BIND' => false

伪静态

伪静态URL设置,增加你想要的静态后缀:'URL_HTML_SUFFIX'=>'shtml'

如果希望支持多个伪静态后缀,可以直接设置如下:
    // 多个伪静态后缀设置 用|分割
    'URL_HTML_SUFFIX' => 'html|shtml|xml'


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

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

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('Blog/cate',array('cate_id'=>1,'status'=>1))
    U('Blog/cate','cate_id=1&status=1')
    U('Blog/cate?cate_id=1&status=1')

伪静态后缀:U函数会自动识别当前配置的伪静态后缀,如果你需要指定后缀生成URL地址的话,可以显式传入,

    U('Blog/cate','cate_id=1&status=1','xml');

跳转和重定向

$this->success();

$this->error()

//自动判断当前请求是否属于Ajax请求

success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒),

    // 操作完成3秒后跳转到 /Article/index
    $this->success('操作完成','/Article/index',3);
    // 操作失败5秒后跳转到 /Article/error
    $this->error('操作失败','/Article/error',5);

successerror方法都可以对应的模板,默认的设置是两个方法对应的模板都是

    //默认错误跳转对应的模板文件
    'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl',
    //默认成功跳转对应的模板文件
    'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl',

重定向:


redirect方法的参数用法和U函数的用法一致:

    //重定向到New模块的Category操作
    $this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');


    //重定向到指定的URL地址

    redirect('/New/category/cate_id/2', 5, '页面跳转中...')


输入变量

获取变量: I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源'])

请求类型

判断请求类型:
常量 说明
IS_GET 判断是否是GET方式提交
IS_POST 判断是否是POST方式提交
IS_PUT 判断是否是PUT方式提交
IS_DELETE 判断是否是DELETE方式提交
IS_AJAX 判断是否是AJAX提交
REQUEST_METHOD 当前提交类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值