项目目录结构

www  WEB部署目录(或者子目录)
├─index.php       入口文件
├─README.md       README文件
├─composer.json   Composer定义文件
├─Application     应用目录
├─Public          资源文件目录
└─ThinkPHP        框架目录

ThinkPHP目录结构

├─ThinkPHP 框架系统目录(可以部署在非web目录下面)
│  ├─Common       核心公共函数目录
│  ├─Conf         核心配置目录
│  ├─Lang         核心语言包目录
│  ├─Library      框架类库目录
│  │  ├─Think     核心Think类库包目录
│  │  ├─Behavior  行为类库目录
│  │  ├─Org       Org类库包目录
│  │  ├─Vendor    第三方类库目录
│  │  ├─ ...      更多类库目录
│  ├─Mode         框架应用模式目录
│  ├─Tpl          系统模板目录
│  ├─LICENSE.txt  框架授权协议文件
│  ├─logo.png     框架LOGO文件
│  ├─README.txt   框架README文件
│  └─index.php    框架入口文件

项目目录结构部

项目名称
├─Common         应用公共模块
│  ├─Common      应用公共函数目录
│  └─Conf        应用公共配置文件目录
├─Home           默认生成的Home模块
│  ├─Conf        模块配置文件目录
│  ├─Common      模块函数公共目录
│  ├─Controller  模块控制器目录
│  ├─Model       模块模型目录
│  └─View        模块视图文件目录
├─Runtime        运行时目录
│  ├─Cache       模版缓存目录
│  ├─Data        数据目录
│  ├─Logs        日志目录
│  └─Temp        缓存目录模块设计

模块化的目录结构

Application      默认应用目录(可以设置)
├─Common         公共模块(不能直接访问)
├─Home           前台模块
├─Admin          后台模块
├─...            其他更多模块
├─Runtime        默认运行时目录(可以设置)每个模块是相对独立的,其目录结构如下:
├─Module         模块目录
│  ├─Conf        配置文件目录
│  ├─Common      公共函数目录
│  ├─Controller  控制器目录
│  ├─Model       模型目录
│  ├─Logic       逻辑目录(可选)
│  ├─Service     服务目录(可选)
│  ... 更多分层目录可选
│  └─View        视图目录

增加新模块:只需要在入口文件index.php文件中增加定义就可以。例如:生成Admin模块

define('APP_PATH','./Application/');
// 绑定入口文件到Admin模块访问
define('BIND_MODULE','Admin');
require './ThinkPHP/ThinkPHP.php'

Admin模块不存在,所以会在第一次访问时创建该模块。

PS:新建模块创建成功后 要删除创建语句,不然再访问模块时 会报 找不到控制器的错误异常

开启调试模式

define('APP_DEBUG', true); // 开启调试模式 false关闭调试模式
define('APP_PATH','./Application/');
require './ThinkPHP/ThinkPHP.php';

配置
每个模块都有独立的配置文件,Conf/config.php

控制器
每个控制器对应一个控制器类,命名规范:
控制器名+Controller.class.php(模块名采用驼峰式 且 首字母大写)
系统默认的控制器是Index,对应的模块目录下Controller/IndexController.class.php,类名与文件名一致,默认操作是public 的 index方法。如果设置为private,protected 无法通过URL访问

参数访问
URL:http://localhost/index.php/home/index/hello/name/baby
name为key baby为value
URL访问home模块下的index控制器的hello方法并传参nama=baby
key 名必须与 方法的接收参数名一致

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {public function hello($name='thinkphp'){echo 'hello,'.$name.'!';}
}

URL 请求
ThinkPHP单一入口模式访问应用,所有请求应都指向应用的入口文件,系统会根据参数解析当前请求的模块->控制器->操作。
例:localhost/index.php/模块/控制器/操作 如果访问不存在的模块控制器操作,系统会默认访问home下的默认Index控制器的默认Index方法。
URL四冲模式:普通模式,PATHINFO,REWRITE和兼容模式。
1.普通模式 传统GET传参来访问指定模块
http://localhost/?m=home&c=index&a=hello&name=thinkphp
m:模块 c:控制器 a:方法 name:参数名 thinkphp参数值
2.PATHINFO
系统默认的就是该URL模式,提供了最好的SEO支持,环境兼容处理。
http://localhost/index.php/home/index/hello/name/thinkphp/
PATHINFO地址的前三个参数分别是模块/控制器/操作
传参:
http://localhost/index.php/home/index/hello?name=thinkphp

PATHINFO的分隔符配置:更改PATHINFO的URL分隔符
'URL_PATHINFO-DEPR'=>'-'
改后:
http://localhost/index.php/home-index-hello-name-thinkphp

3.REWRIT
在PATHINFO上增加的URL重写,去掉了URL中的index.php入口文件,但需要配置web服务器重写规则。
apache 在index.php入口文件同级目录下增加.htaccess文件 内容:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>增加后去除index.php
http://localhost/home/index/hello/name/thinkphp/
  1. 兼容模式
    兼容模式用于不支持PATHINFO的特殊环境
兼容模式配合Web服务器重写规则的定义,可以达到和REWRITE模式一样的URL效果。
http://localhost/?s=/home/index/hello/name/thinkphp

视图
ThinkPHP内置编译模板引擎,支持PHP模板,也包括了Smarty在内的模板驱动。ThinkPHP在渲染模板时如不指定模板,则会用系统默认的定位规则。定义规范:模块目录下的View/控制器名/操作名.html 。Home模块的hello操作的默认模板位于home模块目录下

模板文件
<html>
<head>
<title>hello {$name}</title>
</head>
<body>hello, {$name}!
</body>
</html>

控制器渲染模板

<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {public function hello($name='thinkphp'){//渲染参数$this->assign('name',$name);//此处可指定任何模板 未指定则按照系统规则调用默认的模板文件$this->display();}
}

PS:默认模板 需要根据模块创建 模块名文件夹 再创建模板文件 不然会报找不到模板文件错误

数据库
模块/Conf/config.php 配置数据信息

    'DB_TYPE'=>'mysql',// 数据库类型'DB_HOST'=>'127.0.0.1',// 服务器地址'DB_NAME'=>'magiex',// 数据库名'DB_USER'=>'root',// 用户名'DB_PWD'=>'',// 密码'DB_PORT'=>3306,// 端口'DB_PREFIX'=>'fn_',// 数据库表前缀'DB_CHARSET'=>'utf8',// 数据库字符集

读取数据

/* * 如果指定了数据库前缀,在调用时会自动拼接 前缀+数据库表名 * M('user') 指的是表名 */ public function getData(){ $DB=M('user'); $result=$DB->find(1); $this->assign('result',$result); $this->display('hello'); }

M函数是think内置的实例化模型方法。不需要创建对应的模型类,直接操作读取数据库。而model类则内置了基本的CRUD方法
模板获取数据

<html>
<head>
<title></title>
</head>
<body>hello, {$result.password}!
</body>
</html>

总结实践中的错误:
1. 新建模块创建成功后 要删除创建语句,不然再访问模块时 会报 找不到控制器的错误异常
2. 默认模板 需要根据模块创建 模块名文件夹 再创建模板文件 不然会报找不到模板文件错误

ThinkPHP 入手相关推荐

  1. php缓存注入,利用Thinkphp 5缓存漏洞实现前台Getshell

    原标题:利用Thinkphp 5缓存漏洞实现前台Getshell *本文原创作者:WindWing,属于FreeBuf原创奖励计划,禁止转载 0×00 背景 网站为了实现加速访问,会将用户访问过的页面 ...

  2. TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架

    手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名 首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和co ...

  3. 总结下ThinkPHP的代码审计方法

    简介 ThinkPHP 是国内著名的 php开发框架,基于MVC模式,最早诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP. 本文主要分析 ThinkPHP v3 的程序代码, ...

  4. php框架语法,PHP框架之ThinkPHP框架

    原标题:PHP框架之ThinkPHP框架 小编张老师企鹅:1079943010 ThinkPHP框架人们习惯性又叫它TP框架,是一个轻量级的国产PHP开发框架,快速.兼容而且简单, ThinkPHP可 ...

  5. thinkcmf 去掉index.php,thinkcmf thinkphp隐藏后台地址

    做了一个项目,上线的时候 需要隐藏掉domain.com/admin 这个后台地址,但是用的thinkcmf已经预定义好了admin模块. 我们可以用thinkphp自带的模块映射功能实现, 比方说我 ...

  6. thinkphp ajax请求报500错误

    在控制器中获取ajax请求的数据时报500错误,查了下,是服务器内部原因,用了几个小时在找到底是为什么,苦无果!!!. 后来看到网上说肯定是因为服务器端php代码语法有问题,悲催的我终于开始从语法找问 ...

  7. 链式写法php,ThinkPHP框架SQL操作链式写法原理

    下面给大家介绍ThinkPHP框架SQL操作链式写法原理,希望对需要的朋友有所帮助! 引言 大家如果有面试几次不难发现,虽然国产的TP一直被人诟病.但是丝毫不能影响它在广大企业中的开发受到青睐,强大的 ...

  8. Laravel和Thinkphp有什么区别,哪个框架好用

    Laravel和Thinkphp这两个php框架对于php程序员都不陌生,新手可能对Thinkphp比较熟,也是国内比较出名的开源框架,更高级的Laravel一般有点经验的才使用. TP框架: Thi ...

  9. ThinkPHP 详细介绍

    ThinkPHP 是一个免费开源的,快速.简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的.ThinkP ...

最新文章

  1. Python拼接字符串的7种方法总结
  2. word 常用快捷键
  3. 加载文件流_未关闭的文件流会引起内存泄露么?
  4. 如何往eclipse中导入maven项目
  5. leetcode278. 第一个错误的版本
  6. linux查看队列 msg,linux第10天 msg消息队列
  7. 【CV101大会录播】人流密度/河道污染/安全帽识别获奖算法
  8. 【TensorFlow】TensorFlow从浅入深系列之五 -- 教你详解滑动平均模型
  9. python random.random 缩短小数点儿后位数_Python random模块制作简易的四位数验证码...
  10. mysql固定某列获取不连续的值_SQL-怎么把一列不规律的值,取出其中连续段的首尾数字?...
  11. ubuntu下的tomcat监控脚本
  12. formData上传音乐文件
  13. 文件后缀名修改重命名,两种更改的小技巧
  14. 51单片机——定时器
  15. 认知的方法论 --以学习python编程语言为例
  16. 【渝粤教育】电大中专计算机网络基础_1作业 题库
  17. 计算机网络:小明在家打开一个网址过程细致版(DNS缓存、DNS查询、TCP/IP协议、ARP协议、HTML渲染)
  18. python--log日志的写法和介绍
  19. mongdb 下载慢,解决
  20. 行波iq调制器_行波电光相位调制器输出响应的定量分析

热门文章

  1. 博士申请 | 香港中文大学(深圳)张瑞茂老师组招收计算机视觉博士/硕士/RA
  2. 100-days: thirteen
  3. 电商交易之订单中心设计(一)
  4. 蓝桥杯真题python B试题 C: 纸张尺寸
  5. ssm基于jsp高校选课系统毕业设计源码291627
  6. 好用的在线加密解密工具,亲测有用
  7. 201671010434 王雯涵《英文文本统计分析》结对项目报告
  8. php控件不显示,响应式织梦后台模板辅助插件不显示插件模块不显示解决办法
  9. android 最新微信红包,分享Android微信红包插件
  10. [转载]吃什么鱼最健康?(图)