ThinkPHP框架初步掌握
为了帮老师用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
ThinkPHP框架初步掌握的更多相关文章
- 攻城记:Thinkphp框架的项目规划总结和踩坑经验
一.项目模块规划 1.项目分为PC端.移动端.和PC管理端,分为对应目录为 /Application/Home,/Application/Mobile,/Application/Admin: 对应入口 ...
- ThinkPHP框架的一些基础应用
这是俺滴师傅给俺传授了的知识,特在此分享. TP框架,做PHP开发的都应该有所耳闻.下面,我们就来说说入口文件的生成: 创建新项目时,首先,在目录文件下创建一个新的文件夹.然后将Thinkphp框架文 ...
- 关于在BAE上部署ThinkPHP框架的问题
现在有点小兴奋,因为在在BAE上部署ThinkPHP框架的问题快折腾一天了,午觉都没睡,不过没白整总算有点结果.不扯淡了,直入正题吧. 之前熟悉ThinkPHP框架,想在BAE上用ThinkPHP做点 ...
- 番外一:关于thinkphp框架下的文件导入路径问题
总的来说,要使在thinkphp框架下面HTML导入的图片.css文件和js文件有效,只有两种方法:(1)使用绝对路径:(2)在项目目录下创建新目录Public,把所有的img文件夹.js文件夹和cs ...
- 【PHP】基于ThinkPHP框架搭建OAuth2.0服务
[PHP]基于ThinkPHP框架搭建OAuth2.0服务 http://leyteris.iteye.com/blog/1483403
- thinkphp框架下404页面设置
404页面即系统在找不到请求的操作方法和找不到请求的控制器名称时的一种报错行为的优化. 第一步:在thinkphp框架中的Home/Comtroller中建一个EmptyController.clas ...
- [2012-4-10]ThinkPHP框架被爆任意代码执行漏洞(preg_replace)
昨日(2012.04.09)ThinkPHP框架被爆出了一个php代码任意执行漏洞,黑客只需提交一段特殊的URL就可以在网站上执行恶意代码. ThinkPHP作为国内使用比较广泛的老牌PHP MVC框 ...
- ThinkPHP框架的部署
1.将ThinkPHP框架的框架文件放到想要放置的地方,与创建的应用文件夹同级 2.vhost文件中设置虚拟目录 3.在hosts文件中配置 4.在应用目录中创建入口文件index.php 5.在入口 ...
- ThinkPHP框架如何修改X-Powered-By
以前用ThinkPHP框架开发了一个小网站,前几天查询页面HTTP状态发现,里面有一项: X-Powered-By: ThinkPHP 2.0 这样虽然没什么,但感觉如果别有用心的人查询会知道你是用这 ...
随机推荐
- Linux虚拟机-CentOS7常用命令
1.查找虚拟机的ip地址:$ ifconfig ~inet 192.168.68.136
- Codeforces 1322C - Instant Noodles(数学)
题目链接 题意 给出一个二分图, 两边各 n 个点, 共 m 条边, n, m ≤ 5e5. 右边的点具有权值 \(c_i\), 对于一个只包含左边的点的点集 S, 定义 N(S) 为所有与这个点集相 ...
- Three.js中的动画实现02-[Three.js]-[Object3D属性.onAfterRender/.onBeforeRender]
Table Of Content Object3D简介以及两个属性的介绍 一个示例 Object3D简介以及两个属性的介绍 这是Three.js中大部分对象的基类,提供了一系列的属性和方法来对三维空间 ...
- fiddler详解
一.介绍Fiddler是一个http协议调试工具,能记录并检查电脑和互联网之间的http通讯,设置断点,查看所有的“进出”fiddler的数据(cookie,html,js,css等文件) 通常可从以 ...
- RMI 使用笔记
Java 远程方法调用,即 Java RMI( Java Remote Method Invocation ) .顾名思义,可以使客户机上运行的程序能够调用远程服务器上的对象(方法). 下面主要介绍一 ...
- 浅谈Python导入外部文件
import 和 from ... import * 有什么区别? 例如我写了个模块hello.py def print_func(args): print("Hello " + ...
- Haystack+ES解决搜索服务
最近项目组需要对老的搜索项目进行迁移和改造,刚入职2个星期的我光荣的接受了这份工作,这也是我第一次接触Haystack和Elasticsearch,以下是记录下工作中的一些需求解决,具体haystac ...
- udev规则,部署Multipath
部署Multipath多路径环境 配置iSCSI服务 编写udev规则 配置并访问NFS共享 部署Multipath多路径环境 1 配置iSCSI服务 1.1 问题 本案例要求先搭建好一台iSCSI服 ...
- 【php】面向对象(三)
知识点关键词:FSCICATS一. f => final: a) 是一个修饰符,用来修饰类和成员方法 b) 使用final修饰符修饰的类不能被继承,使用final修饰符修饰的成员方法,不能被重写 ...
- Jmeter使用Websocket插件测试SingalR,外加还有阿里云PTS的Jmeter原生测试爬坑日志。
题外话:距离我的上一篇博客已经过去7年多了,我实在是个不务正业的程序员,遇到测试方面的东西总想分享一下,因为可用的资料实在太少了(包括国外的资料). 本人不喜欢授人以鱼,所以不会直接给出问题和解决方案 ...