首页 > 开发 > ThinkPHP > 正文

关于thinkphp

2024-09-09 15:20:02
字体:
来源:转载
供稿:网友

1. 缓存

修改模版时要注意及时删除缓存,否则不能立即生效。

2.命名规范

类文件以.class.php为后缀,驼峰法命名,并且首字母大写,例如DbMysql.class.php。

函数、配置文件等其他类库文件之外的一般是以.php为后缀(第三方引入的不做要求)。

类名和文件名一致,例如 UserAction类的文件命名是UserAction.class.php, InfoModel类的文件名是InfoModel.class.php,

函数的命名使用小写字母和下划线的方式,例如 get_client_ip

Action控制器类以Action为后缀,例如 UserAction、InfoAction

模型类以Model为后缀,例如UserModel、InfoModel

方法的命名使用驼峰法,并且首字母小写,例如 getUserName

属性的命名使用驼峰法,并且首字母小写,例如 tableName

以双下划线“__”打头的函数或方法作为魔法方法,例如 __call 和 __autoload

常量以大写字母和下划线命名,例如 HAS_ONE和 MANY_TO_MANY

配置参数以大写字母和下划线命名,例如HTML_CACHE_ON

语言变量以大写字母和下划线命名,例如MY_LANG,以下划线打头的语言变量通常用于系统语言变量,例如 _CLASS_NOT_EXIST_。

数据表和字段采用小写加下划线方式命名,例如 think_user 和 user_name

特例:在ThinkPHP里面,单字母大写函数,通常是某些操作的快捷定义,或者有特殊的作用。例如,ADSL方法等等

3.配置

ThinkPHP提供了灵活的全局配置功能,采用最有效率的PHP返回数组方式定义,支持惯例配置、项目配置、调试配置和模块配置

惯例配置:系统内置有一个惯例配置文件(位于ThinkCommonconvention.php),按照大多数的使用对常用参数进行了默认配置。

项目配置:项目配置文件位于项目的配置文件目录(默认是Conf)下面,文件名是config.php。

调试配置:如果启用了调试模式的话,那么会导入框架默认的调试配置文件,默认的调试配置文件位于ThinkCommondebug.php。自定义项目配置文件位于conf/debug.php

分组配置:分组配置用于系统启用了分组模式的情况之下,对于每个分组可以单独定义自己的配置文件。分组配置文件位于:项目配置目录/分组名称/config.php

模块配置:

ThinkPHP支持对某些参数进行动态配置,针对这一特性,ThinkPHP还特别引入了模块配置文件的支持,这其实也是动态配置的体现。

模块配置文件位于:

项目配置目录/模块名(小写)_config.php // 用于不使用分组的情况

或者

项目配置目录/分组名/模块名(小写)_config.php // 用于使用分组的情况

读取配置:定义了配置文件之后,可以使用系统提供的C方法来读取已有的配置:

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

动态配置:在具体的Action方法里面,我们仍然可以对某些参数进行动态配置,主要是指那些还没有被使用的参数。

C('参数名称','新的参数值');

扩展配置:惯例配置如下 'APP_CONFIG_LIST' => array('taglibs','routes','htmls','modules','actions','tags'),  

4.模块和操作

4.1基础

每个模块是一个Action文件,类似于我们平常所说的控制器,系统会自动寻找项目类库Action目录下面的相关类,如果没有找到,则会定位到空模块,否则抛出异常。

而actionName操作是首先判断是否存在Action类的公共方法,如果不存在则会继续寻找父类中的方法,如果依然不存在,就会寻找是否存在自动匹配的模版文件。如果存在模版文件,那么就直接渲染模版输出。

因此应用开发中的一个重要过程就是给不同的模块定义具体的操作。一个应用如果不需要和数据库交互的时候可以不需要定义模型类,但是必须定义Action控制器。

4.2 默认模块

系统的默认模块设置是Index模块,默认操作设置是index操作

4.3 模块分组

模块分组功能是为了更好的组织已有的模块,并且增加项目容量的一个有效机制。分组功能可以把以往的多项目合并到一个项目中去,这样一来,之前需要采用跨项目 操作的地方,现在因为在一个项目中从而免去了不少麻烦,并且公共文件的重用也方便了,并且每个分组都可以有自己独立的配置文件、公共文件、语言包,在 URL的访问上面也非常清晰。

要启用分组模块非常简单,配置下APP_GROUP_LIST参数和DEFAULT_GROUP参数即可。

例如我们把当前的项目分成Home和Admin两个组,分别表示前台和后台功能

'APP_GROUP_LIST'=>'Admin,Home',   

'DEFAULT_GROUP'=>'Home',  

4.3 URL模式

ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。

URL_MODEL 为0,采用传统的URL参数模式,http://<serverName>/appName/?m=module&a=action&id=1 

URL_MODEL 为1,默认情况使用PATHINFO模式,ThinkPHP内置强大的PATHINFO支持,提供灵活和友好URL支持。PATHINFO模式根据不同的设置还包括普通模式和智能模式两种:

普通模式 设置URL_PATHINFO_MODEL 参数为1 ,该模式下面URL参数没有顺序,例如

http://<serverName>/appName/m/module/a/action/id/1

http://<serverName>/appName/a/action/id/1/m/module

以上URL等效

智能模式 设置URL_PATHINFO_MODEL 参数为2 (系统默认的模式),自动识别模块和操作,例如

URL_MODEL 为2,REWRITE模式,该URL模式和PATHINFO模式功能一样,除了可以不需要在URL里面写入口文件,和可以定义.htaccess 文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式了,具体参考下面的URL重写部分。

URL_MODEL 为3,兼容模式,兼容模式是普通模式和PATHINFO模式的结合,并且可以让应用在需要的时候直接切换到PATHINFO模式而不需要更改模板和程序。兼容模式URL可以支持任何的运行环境。

4.4 URL路由

4.5 URL伪静态

系统支持伪静态URL设置,可以通过设置URL_HTML_SUFFIX参数随意在URL的最后增加你想要的静态后缀,而不会影响当前操作的正常执行。例如,我们设置URL_HTML_SUFFIX 为 .shtml 的话,我们可以把下面的URL

http:///Blog/read/id/1 

变成

http:///Blog/read/id/1.shtml 

4.6 URL重写

通常的URL里面含有index.php,为了达到更好的SEO效果可能需要去掉URL里面的index.php ,通过URL重写的方式可以达到这种效果,通常需要服务器开启URL_REWRITE模块才能支持。

下面是Apache的配置过程,可以参考下:

1、httpd.conf配置文件中加载了mod_rewrite.so模块

2、AllowOverride None 将None改为 All

3、确保URL_MODEL设置为2

4、把.htaccess文件放到入口文件的同级目录下

  1. RewriteEngine on 
  2. RewriteCond %{REQUEST_FILENAME} !-d 
  3. RewriteCond %{REQUEST_FILENAME} !-f 
  4. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 

4.7 URL生成

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

4.8 URL大小写

系统本身已经提供了一个很好的解决方案,可以通过配置简单实现。只要在项目配置中,增加:

'URL_CASE_INSENSITIVE' =>   true

就可以实现URL访问不再区分大小写了。

4.9 空操作

空操作是指系统在找不到指定的操作方法的时候,会定位到空操作(_empty)方法来执行,利用这个机制,我们可以实现错误页面和一些URL的优化。

  1. Class CityAction extends Action{     
  2.     Public function _empty(){ 
  3.          ... 
  4.    } 

4.10 空模块

空模块的概念是指当系统找不到指定的模块名称的时候,系统会尝试定位空模块(EmptyAction),利用这个机制我们可以用来定制错误页面和进行URL的优化。

Class EmptyAction extends Action{ 

4.11 前置和后置操作

前置和后置操作

系统会检测当前操作是否具有前置和后置操作,如果存在就会按照顺序执行,例如,我们在UserAction类里面定义了_before_insert() 和 _after_insert() 操作,那么执行User模块的insert操作的时候,会按照顺序执行下面的操作:

  1. _before_insert 
  2. insert 
  3. _after_insert 

4.12操作链

ThinkPHP支持使用操作链的方式,例如,我们访问下面的URL:http://serverName/appName/User/action1:action2:action3/

那么会依次执行UserAction的action1 action2 action3方法,并且当前操作名称是最后一个操作。在进行默认模板输出的时候会用到。如果确实需要在不同的操作方法中都进行输出,请确保在 Action的display方法中指定需要渲染的模板文件名。否则,只能输出最后的操作模板。使用了操作链后,前置和后置方法会失效。

4.13 跨模块调用

在开发过程中经常会在当前模块调用其他模块的方法,这个时候就涉及到跨模块调用,我们还可以了解到A和R两个快捷方法的使用。

$User = A("User"); // 实例化UserAction控制器对象

$User->importUser(); // 调用User模块的importUser操作方法

这里的A("User") 是一个快捷方法,和下面的代码等效:

  1. import("@.Action.UserAction"); 
  2. $User = new UserAction(); 

事实上,在这个例子里面还有比A方法更简单的调用方法,例如:

R("User","importUser"); // 远程调用UserAction控制器的importUser操作方法

上面只是在当前项目中调用,如果你有需要在多个项目之间调用方法,一样可以完成:

  1. $User = A("User","App2"); // 实例化App2项目的UserAction控制器对象 
  2. $User->importUser();  
  3.  // 远程调用App2项目的UserAction控制器的importUser操作方法 
  4.  R("User","importUser","App2"); 

4.14 页面跳转

在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面,系统的Action类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交,使用方法很简单,举例如下:

  1. $User = M("User"); // 实例化User对象 
  2. $result = $User->add($data); 
  3. if ($result){ 
  4. // 设置成功后的跳转页面地址 默认的返回页面是$_SERVER["HTTP_REFERER"] 
  5. $this->assign("jumpUrl","/User/list/"); 
  6.  $this->success("新增成功!"); 
  7. }else
  8. // 错误页面的默认跳转页面是返回上一页 通常可以不用设置 
  9.  $this->error("新增错误!"); 

Success和error方法都有对应的模板,并且是可以设置的,默认的设置Public:success和Public:error,模板文件可以使用模板标签,并且可以使用下面的模板变量:

$msgTitle :操作标题

$message :页面提示信息

$status :操作状态  1表示成功 0 表示失败 具体还可以由项目本身定义规则

$waitSecond :跳转等待时间 单位为妙

$jumpUrl :跳转页面地址

如果是AJAX方式提交的话,success和error方法会调用ajaxReturn方法返回信息,具体可以参考后面的AJAX返回部分。

4.15 重定向

Action类的redirect方法可以实现页面的重定向功能。

redirect方法的参数用法和U函数的用法一致(参考上面的URL生成部分),例如:

$this->redirect('User/list', array('cate_id'=>2), 5,'页面跳转中~')

上面的用法是停留5秒后跳转到User模块的list操作,并且显示页面跳转中字样,重定向后会改变当前的URL地址。

4.16 AJAX返回

系统支持任何的AJAX类库,提供了ajaxReturn方法用于AJAX调用后返回数据给客户端。

并且支持JSON、XML和EVAL三种方式给客户端接受数据,通过配置DEFAULT_AJAX_RETURN进行设置,在选择不同的AJAX类库的时候可以使用不同的方式返回数据。

要使用ThinkPHP的ajaxReturn方法返回数据的话,需要遵守一定的返回数据的格式规范。ThinkPHP返回的数据格式包括:

status 操作状态

info 提示信息

data 返回数据

返回数据data可以支持字符串、数字和数组、对象,返回客户端的时候根据不同的返回格式进行编码后传输。如果是JSON格式,会自动编码成JSON字符 串,如果是XML方式,会自动编码成XML字符串,如果是EVAL方式的话,只会输出字符串data数据,并且忽略status和info信息。

下面是一个简单的例子:

  1. $User = M("User"); // 实例化User对象 
  2. $result = $User->add($data); 
  3. if ($result){ 
  4. // 成功后返回客户端新增的用户ID,并返回提示信息和操作状态 
  5.  $this->ajaxReturn($result,"新增成功!",1); 
  6. }else
  7. // 错误后返回错误的操作状态和提示信息 
  8.  $this->ajaxReturn(0,"新增错误!",0); 

注意,确保你是使用AJAX提交才使用ajaxReturn方法。

在客户端接受数据的时候,根据使用的编码格式进行解析即可。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选