为了帮老师用ThinkSNS二次开发一个微博系统,专门花了几天学习ThinkPHP框架,现在将一些ThinkPHP入门知识作以记录。
首先声明:
本文不是完全教程,只是将开发中碰到的问题作以总结,如果需要学习ThinkPHP框架,请参考官网文档:
ThinkPHP3.1快速入门教程(更新中)
目录结构
目录/文件 | 说明 |
---|---|
ThinkPHP.php | 框架入口文件 |
Common | 框架公共文件目录 |
Conf | 框架配置文件目录 |
Lang | 框架系统语言目录 |
Lib | 系统核心基类库目录 |
Tpl | 系统模板目录 |
Extend | 框架扩展目录(关于扩展目录的详细信息请参考后面的扩展章节) |
我的文件结构
入口(ThinkPHP.php)
1、先在Web根目录(我用的phpstudy,是www文件夹)下面创建一个app项目(这个app就是我们的项目名)。
2、将下载的ThinkPHP解压(我是解压到app下,名为ThinkPHP)。
3、在app目录下面创建一个index.php文件,添加两行简单的代码:
<?php define("APP_DEBUG", TRUE); //开启调试模式,方便调试 require '/ThinkPHP框架所在目录/ThinkPHP.php'; //我的为/ThinkPHP/ThinkPHP.php
这行代码的作用就是加载ThinkPHP框架的入口文件ThinkPHP.php,这是所有基于ThinkPHP开发应用的第一步。
然后,在浏览器中访问这个入口文件。
http://localhost/app/index.php
因为index.php为默认首页,所以亦可省略。
模板(Tpl)
Tpl文件夹下为模版页面,可放置html、php等页面。
同时支持多模块,即可在Tpl下建立多个文件夹,每个文件夹对应一个模块,同时一个模块和一个控制器对应(需要名字相同)
我的:
两个模块Form、Index
Tpl下对应有两个文件夹Form、Index
则对应的控制器也是两个FormController.class.php、IndexController.class.php
控制器(Controller)
命名:模块名+Controller
PATHINFO模式:是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。
对应上面的URL模式,PATHINFO模式下面的URL访问地址是:
http://localhost/app/index.php/module/action/var/value/
//module为模块名称(控制器名称)、不带Controller //action为操作名称(控制器中的方法名称)、不带Model //var为参数名 //value为参数值 //var与value成对出现
我的:
http://localhost/app/index.php/Index/index
调用IndexController下的index()方法 如果该方法不存在,将直接调用Tpl/Index/index.html页面
模型(Model)
1、命名:模块名字+Model
在ThinkPHP的模型里面,有几个关于数据表名称的属性定义,在对应的Model中声明为属性字段(或者叫成员变量):
属性 | 说明 |
---|---|
tableName | 不包含表前缀的数据表名称,一般情况下默认和模型名称相同,只有当你的表名和当前的模型类的名称不同的时候才需要定义。 |
trueTableName | 包含前缀的数据表名称,也就是数据库中的实际表名,该名称无需设置,只有当上面的规则都不适用的情况或者特殊情况下才需要设置。 |
dbName | 定义模型当前对应的数据库名称,只有当你当前的模型类对应的数据库名称和配置文件不同的时候才需要定义。 |
只要命名规范,ThinkPHP会根据Model名字找到你要调用的数据库表,当然,前提你得建立。
规则:
1)表名为tp_categories(tp_为表前缀,在配置文件中配置)
protected $tableName = 'categories';
2)表名为top_depts,top_不是系统配置的表前缀,需要使用表的全名
protected $trueTableName = 'top_depts';
3)可设置数据库
protected $dbName = 'top';
调用:
可调用本模块Model,也可跨项目或模块调用。
本模块:
D("UserModel")
跨项目:
D("UserModel", "app") //D(Model名称,项目名称)
M方法与D方法类似,不过,我只用了D方法
函数库
可通过load(@.hello),hello为函数库文件名称
也可通过在项目配置文件中定义LOAD_EXT_FILE参数,例如:
"LOAD_EXT_FILE"=>"user,db"
类库
通过import可引入使用的类包,可跨项目或模块
import("App.Model.UserModel");
App为应用名 Model表明是模型 UserModel为模型名称
数据库
这块东西太多,使用也最频繁,因此,官方文档介绍的很详细,请大家点击文章开头的链接查看
写了好久,希望对大家有点用处。
原文链接:http://www.cnblogs.com/FlyFive/archive/2013/01/06/2848246.html