ThinkPHP学习心得

ThinkPHP版本:3.3.2

1、应用目录下的入口文件,在使用URL的时候必须有,除非部署的时候被简化,比如应用www/office/,下入口文件叫index.php,则在未简化部署的情况下,访问自定义控制器Application/Controller/HelloController.class.php下的方法sayHello()时,URL应为:http://localhost/office/index/Hello/sayHello(Windows中URL大小写无关,Linux会发生找不到模块的问题)。

2、前置后置方法类似于spring中的切面,但是只对访问控制器有效,其他分层控制器,如事件控制器或其他自定义控制器无效。注意:1)比如操作叫sayHello,则前置方法命名规则_before_sayHello,后置方法命名规则_after_sayHello;2)如果在前置或者操作中exit或者输出错误,则后置方法不会被调用;3)前置后置方法必须是public。
3、操作的参数绑定:1)按变量名绑定,变量名必须有,多个变量顺序可以调整;2)按变量顺序绑定,变量名可以省略,但是变量值必须按照参数顺序,并且仅对pathinfo型和兼容型的URL地址有效。
4、根路径:默认常量定义:think\library\。所以在代码里,实例化模块的控制器时,都是\开始,表示根路径下,比如\Admin\Controller\xxx。
5、路径检索顺序,比如检索Admin\MyClass:1)是否注册了Admin\MyClass,如果有则加载类库映射定义的文件;2)检索think\library\下是否有\Admin目录;3)是否有注册的Admin根命名空间;4)如果以上都不存在,则以Admin为模块目录进行检索。这也是类库加载的顺序。
6、实例化控制器:1)全路径,如:$User = new \Home\Controller\UserController();2)快捷调用函数A,如:$User = A('User');//当前模块下,默认Controller控制器。3)分层控制器Event(即Controller同层控制器目录Event),对于第一种把Controller换成Event,对于函数A:$user = A('User', 'Event');4)特殊情况:多级控制器,比如Controller下有个目录User\UserController.class.php,意思是User控制器是Controller控制器的子控制器,用函数A时:$user=A('User\User');注意,这里是'\'(正斜杠);如果是其他模块控制器,比如Admin/Controller/UserController.class.php,在本模块用函数A实例化时:$user=A('Admin/User');注意,这是'/'(反斜杠)。这里的两个斜杠如果写反了,会导致实例化失败(返回boolen的false,成功返回object的对象)。
7、一定要注意命名规范!比如模块/控制器目录/控制器类的结构,目录应该是Admin/Controller/UserController.class.php,模块:Admin,控制器目录:Controller,控制器类:UserController.class.php。关键:1)控制器类文件必须是.class.php为后缀;2)文件名和类名必须是“名称+控制器目录”格式,即使是多级的下层控制器也是,不需要加中间层目录名,但是一定要加控制器目录名。
8、设定默认绑定控制器(BIND_CONTROLLER)和默认绑定模块(BIND_MODULE)后,其他的控制器和模块就无法访问,除非加入到可访问列表内。
9、空操作:public function _empty([$param]) 空控制器:class EmptyController extends Controller{ public function index(){}}。注意,空操作必须是_empty函数名,空控制器必须是Empty+默认控制器。空操作的作用是在URL中的操作找不到时调用,空控制器是URL中的控制器找不到时调用。
10、插件控制器,URL如:http://localhost/worker/welcome/info/index/plugin/SystemInfo,分解:localhost:主机地址;worker:应用名称;welcome:应用入口文件welcome.php;info:要检索的控制器;index:要检索的控制的操作;plugin:插件变量,代表前面要检索的控制器在后面的控制器根目录下查找;SystemInfo:插件控制器根目录。注意:1)从3.2.3版本开始,插件目录默认和模块目录同级(3.2.2是在模块目录下一级);2)插件目录必须是Addon(注意大小写);3)插件控制器根目录必须在Addon目录下,如前例中实际查找的控制器操作在Addon\SystemInfo\Controller\InfoController.class.php中;4)URL中插件控制器根目录大小写必须和实际目录完全一样;5)插件变量(前例中plugin)可以改变,但是和插件目录无关,只是表意字符,修改方式为在通用配置中,修改'VAR_ADDON'=>'plugin';6)插件目录可以修改位置,而不是必须和模块同级,修改方法:首先修改应用入口文件(前例为welcome.php)中添加常量define('ADDON_PATH',APP_PATH.'Common/Addon');其次修改通用配置文件中'AUTOLOAD_NAMESPACE'=>array('Addon'=> APP_PATH.'Common/Addon',)。一定要注意插件目录Addon名字不能变,一定要注意插件根目录和URL中大小写一致。
11、模型类用来操作数据库,模型类的名字对应数据表。模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model)。
12、数据库的field方法,第一个参数可以是字符串,但是用于排除列名的时候,字符串不能包含空格,因为数据库表的列名可能包含空格,所以排除时没有用trim清理列名中的空格,只是用‘,'进行了分段。
13、数据库的page方法,第一个数字是页数,第二个数字是每页行数,页数起始数字是1,即从第一页开始,如果传入<=0的数字,都会重新按1处理。
14、模板编译后的文件保存在Runtime中对应模块的目录下,文件名是随机字符串。
15、模板输出时,变量和默认值必须在所有函数的前面,因为引擎在组装时,是以'|'为间隔,从左到右简析组装,遇到default时,会把前面的变量组装到isset(变量)中,而如果default前面有函数,则会组装成isset(函数(变量)),isset不能传入函数,导致发生异常。而且,引擎在解析时,遇到第一个函数后,会把后面所有的字符组(两个|间的字符)作为函数名,所有如果把变量放在函数后面,会把变量也解析为函数名,除非变量的确是想要的函数名的字符串,否则不要把变量放在函数名后面出现。
16、模板输出变量时,对于变量中有'.'出现的,并且变量要作为函数参数的,要采用 {变量|函数}的格式,而不能使用{:函数(变量)}的格式,因为引擎会把"变量.变量"解析为字符串连接,比如"user.name",使用{:getname($user.name)},则会把$user.name解析为字符串$user的值加上字符串"name"。
17、模板支持直接输出$_SERVER、$_ENV、 $_POST、 $_GET、 $_REQUEST、$_SESSION和 $_COOKIE变量。
18、模板文件名和路径:模板文件默认保存在"APP_PATH/MODULE_PATH/View/控制器/"目录下,每个模板文件对应控制器的一个操作(控制器类的一个方法),所以模板文件名和操作对应,比如操作是User/add,即控制器User下的add操作,则模板文件名是:add.html,模板文件路径是"APP_PATH/MODULE_PATH/View/User/add.html"。模板文件后缀可以修改,模板保存路径根目录可以修改。
19、标签assign的属性name中,直接输入变量名字符串,不需要加$,即使是系统变量也是,引擎会在解析时在字符串前面加上$,组装成变量。
20、标签assign、define定义的变量和常量,在php文件中可以直接访问,不过要在display之后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值