读取配置
获取已经设置的参数值:C('参数名称')
$model = C('URL_MODEL');
$model = C('url_model'
);
C方法也可以用于读取二维配置:
//获取用户配置中的用户类型设置
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);
success
和error
方法都可以对应的模板,默认的设置是两个方法对应的模板都是
//默认错误跳转对应的模板文件
'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 | 当前提交类型 |