URL模式:
通过URL_MODEL参数设定URL的模式,具体包括:普通模式,PATHINFO模式,REWRITE模式和兼容模式;
普通模式:URL_MODEL=0;
采用传统的URL参数模式。如:http://serverName/appName/?m=module&a=action&id=1
PATHINFOR模式:URL_MODEL=1;
该模式为默认模式。如:http://serverName/appName/module/action/id/1/
在不考虑路由的情况下,第一个参数被解析为模块名(如果使用分组),第二个参数解析为操作,后面的参数是显示传递的;
参数之间的分隔符可以通过URL_PATHINFO_DEPR参数设置,默认为/;
该模式下将把相关参数转换为GET变量;
REWRITE模式:URL_MODEL=2;
该URL模式和PATHINFO模式功能一样,除了可以不需要在URL里面写入口文件,和可以定义.htaccess 文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式了;
兼容模式:URL_MODEL=3;
兼容模式是普通模式和PATHINFO模式的结合,并且可以让应用在需要的时候直接切换到PATHINFO模式而不需要更改模板和程序,还可以和URL_WRITE模式整合。兼容模式URL可以支持任何的运行环境;
该模式其实是利用了VAR_PATHINFO参数,用普通模式的实现模拟了PATHINFO的模式。但是兼容模式并不需要自己传s变量,而是由系统自动完成URL部分;
模块和操作:
ThinkPHP根据当前URL分析所要执行的模块和操作,由URL调度器以一下规范实现:
http://域名/项目名/分组名/模块名/操作名/其他参数;
模块:
模块就是一个控制器类,通常位于项目的Lib\Action目录中。类名就是模块名加上Action后缀。Action类必须继承系统的Action基础类以 确保使用Action类内置的方法;
每个模块的操作并非一定需要有定义操作方法,因为如果系统找不到相应的控制器方法,将自动定位到该控制器的模版目录下查找相应的模版文件;
对于没有带模块和操作参数的URL,系统会寻找默认模块DEFAULT_MODULE和默认操作DEFAULT_ACTION。系统默认模块为Index模块,默认操作为index操作;
如果访问一个不存在的操作或模块,并且也没有渲染到默认定位的模版文件,该情况在调试模式下会抛出异常错误,在部署模式下将发送404错误。可以通过空模块或空操作方法引导到所设置的页面;
空操作:
系统找不到指定的操作方法时将定位到空操作(_empty())方法来执行;
空模块:
系统找不到指定的模块时将定位到空模块(EmptyAction);
分组:
分组中的目录结构与普通模块中目录结构有所不同,APP/Common/,APP/Conf/,APP/Action/,APP/Model/,APP/Lang/,APP/Tpl/,APP/Runtime都可以进行分组操作;
前置和后置操作:
_befor_FncNme();_after_FncNme();
前置和后置方法中一般不定义模版输出,真正有模版输出的方法是当前方法;
在某些方法中使用了exit()或错误输出之类的情况下有可能不再执行后置操作方法;
跨模块调用:
new实例化模块对象:系统自动加载所有控制器类;
A()实例化模块对象:A()支持跨分组,跨项目的调用,默认情况下调用当前项目下的模块。具体用法:A('[App://][Group/]Action');
R()调用模块的一个方法:使用格式为:R('[App://][Group/]Action/Function',array(arg1,arg2,......));
页面跳转:
success():设置成功后的跳转页面地址,默认的返回页面是$_SERVER['HTTP_REFERER'];
error():错误页面的默认跳转页面是
重定向:
redirect():参数与U()一致;
获取系统变量:
ThinkPHP支持PHP原生系统变量,同时增强了对系统变量的支持,包括过滤和默认值设置。格式如下:
$this->FunctionName(argName[,FunctionFilter][,defaultValue]);
其中FUnctionName具体包括:
_get:获取GET参数;
_post:获取POST参数;
_request:获取REQUEST参数;
_put:获取PUT参数;
_session:获取$_SESSION参数;
_cookie:获取$_COOKIE参数;
_server:获取$_SERVER参数;
_globals:获取$GLOBALS参数;
FunctionFilter:默认使用htmlspecialchars()处理;
判断请求类型:
isGet():判断是否是GET方式提交;
isPost():判断是否是POST方式提交;
isPut():判断是否是PUT方式提交;
isDelete():判断是否是DELETE方式提交;
isHead():判断是否是HEAD提交;
isAjax():判断是否是AJAX提交。如果使用ThinkAjax或自己写的Ajax类库的话,需要在表单里添加一个隐藏域告诉后台属于ajax提交。默认隐藏域名称是ajax,可以通过VAR_AJAX_SUBMIT配置。如果是jquery类库,无需添加隐藏域;
获取URL参数:
一般情况下URL中的参数通过GET获取,但由于PATHINFO的特殊性,URL最终将被解析后才能转化为GET参数。
如果对URL做了特别的定制又不想使用URL路由,可以使用框架提供的URL参数获取,格式如下:
$_GET['_URL_'][idx];
AJAX返回:
ThinkPHP支持任何的Ajax类库,Action类提供了ajaxReturn方法用于Ajax调用后返回数据给客户端。
支持JSON,XML,EVAL三种数据格式返回客户端,默认为JSON,可通过DEFAULT_AJAX_RETURN进行配置。
ThinkPHP对ajaxReturn方法返回的数据具有一定的格式约束:
status:操作状态;
info:提示信息;
data:返回数据;
对于返回数据为EVAL时,将忽略status和info信息;
浙公网安备 33010602011771号