1.
|--空操作和空模块出现:
|--模块写错或者模块下的方法写错;(访问不存在的M和A也算是“广义上”写错了,因为它没有嘛)
|--缺省模块和方法名,但是默认模块和方法也没有加载成功。
// 总之一句话,这是由于URL出错,找不到任何MA造成的。
|--而默认操作和模块出现的条件:
|--模块或者方法没写,系统就会默认定位默认M和A
|--但是这里有个前提:你的默认M和A要能正常加载得到。
//这是缺省M和A造成的,但至少有DEFAULT找得到。
// 但其实事实上,空模块和空操作并不简单只是给出错页面做优化那么简单,他们的结合还有更强大的功能。
2.模块分组:
|--使原本跨平台的项目归于同一个项目下,减少操作的繁琐,加大公用文件的重复利用,同时也能对不同分组下模块做定制。
|--比如网站的前台后台管理方式有所不同,但单独写两个项目,很繁琐,分组解决一切。
|--注意事项:待完善.....
3.伪静态:
|--给URL加点后缀,可能是出于安全考虑。
|--方法:在配置文件里:'URL_HTML_SUFFIX'=>'.shtml' //也支持多个,还有U方法控制伪静态。
4.URL路由:
|--对URL进行特殊解析,或者重定向。
|--分为规则路由和正则路由,详细用法和格式见手册。
5.URL重写:
|--目的:减少URL,无论是安全性还是SEO都是有好处的。
|--方法:
|--在apche: * 修改httpd.conf把mod_rewrite模块注释拿掉,开启这个模块
* AllowOveride None 把None修改为ON
在项目配置文件:URL_MODEL => 2,
在项目入口文件的同级目录下:新建这个文件.htaccess,内容见手册。
6.URL生成:
|--目的:因为存在四种URL_MODULE,所以需要匹配他们,
而且如果项目被移植,位置变动,就必须根据实际情况下的URL动态生成URL地址。
|--基于U方法,规则见手册。
7.URL大小写:
|--前提:依据TP命名规范写好Action
|--方法:在配置文件里,URL_CASE_INSENSITIIVE => ture,即可关闭用户在访问URL的大小写统一了。
UserTypeAction对于这种命名的类,采取U方法自动生成URL,或者URL_CASE_INSENSITIIVE => ture
才可以直接URL写usertype,否则是user-type。
8.前置操作和后置操作:
|--模式: _befor_haoge()
haoge()
_after_haoge()
|--需要注意: |--即使haoge()没有定义,直接渲染haoge.html,前置后置方法依然会生效。
|--如果haoge()调用了error()方法或者发生错误或者调用了exit(),后置方法就失效了。
9.跨项目调用:
|--调用模块:(Action)
A('User'); //默认就是调用当前项目的MODULE。
A('tool/User'); //这个结构就是调用当前项目的tool分组的MODULE
A('Admin://tool/User'); //这种结构就是调用Admin项目下的tool分组的MODULE
|--调用操作: (方法)
R('User/info'); //默认调用当前项目下的User类的info{这是最小结构了}
R('tool/User/info'); //调用当前项目下的tool分组下的info
R('Admin://tool/User/info'); //调用Admin项目下的tool分组下的User类的info
如果info()里面需要传参数,那么甚至可以这么调用info(): R('User/info', 15);
10.页面跳转:
|--error和success函数调用:
$this->error('操作失败哦', url);
$this->success('操作成功',url);
|-- * success如果不设置url参数,默认跳转到$_SERVER['HTTP_REFERER'],error默认跳转至前一个操作页面。
* 这两个方法的视图模板分别在:
|--默认:{使用框架文件的}
//默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
//默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => THINK_PATH . 'Tpl/dispatch_jump.tpl';
|--也可以自定义:
//默认错误跳转对应的模板文件
'TMPL_ACTION_ERROR' => 'Public:error';
//默认成功跳转对应的模板文件
'TMPL_ACTION_SUCCESS' => 'Public:success';
|--还可以进入模板文件修改参数:$msgTitle $message $status $waitSecond $jumpUrl
|--新版TP还支持传值和ajax返回,具体见手册。
11.重定向:
用法同U方法:
//重定向到New模块的Category操作
$this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');
//重定向到指定的URL地址
$this->redirect('/New/category/cate_id/2', 5, '页面跳转中...');
12.获取系统变量:
|--依旧支持PHP原生的获取方法,但加强了功能:变量过滤和默认值支持,
使用方法:$this->方法名("变量名",["过滤方法"],["默认值"]);
具体见手册,很清晰:也支持关闭默认的过滤功能,或者,去配置文件修改过滤规则
* 还有一个智能识别获取类型的 _param
13.判断请求类型:
if(!$this->isPost()) echo "请求不合法";
判断ajax请求:需要认真看看手册,有几个特殊之处要注意。
14.获取URL参数,和 获取系统变量 用的函数看起来一样,其实就获取范围,还是有细微区别。
15.Ajax返回
16.Action参数绑定:在Action里写方法,把方法的参数与URL参数保持相同,那么在解析URL时,系统默认把他们绑定,利于跨项目管理。
另外,最好写函数时,给函数指定默认值,永远不要相信用户的输入值。
17.多层控制器支持。