TP框架:
1.模板引擎
2.MVC设计模式
3.常用操作类

模板引擎和框架区别
1.模板引擎只是框架中用来做php和html分离

MVC设计模式
M model 数据模型
V view 视图
C control 控制器

V(html模板) -> C(PHP逻辑控制) -> M(Model类表操作)

定义一个新app:
define("APP_NAME","home");
define("APP_PATH","./home/");
define("APP_DEBUG",true);
include "ThinkPHP/ThinkPHP.php";
会生成home目录

模板定界符:
ThinkPHP/Conf/convention.php
TMPL_L_DELIM 模板引擎普通标签开始标记 {
TMPL_R_DELIM 模板引擎普通标签结束标记 }

与数据库有关的配置:
ThinkPHP/Conf/convention.php
'DB_TYPE' => 'mysql', // 数据库类型
'DB_HOST' => 'localhost', // 服务器地址
'DB_NAME' => 'test', // 数据库名
'DB_USER' => 'root', // 用户名
'DB_PWD' => '123456', // 密码
'DB_PORT' => '3306', // 端口
'DB_PREFIX' => '', // 数据库表前缀

url/入口/模块/操作

ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括
1.普通模式
http://localhost/test/index.php?m=Index&&a=index
2.PATHINFO
http://localhost/test/index.php/Index/index
3.REWRITE
http://localhost/test/Index/index
4.兼容模式
http://localhost/test/index.php/?s=/Index/index

REWRITE方式来访问模式和操作
1.apache必须支持mod_rewrite.so模块
2.htaccess里面书写的rewrite模式

常量:
__ROOT__ 网站根目录地址
__APP__ 当前项目(入口文件)地址
__GROUP__ 当前分组的URL地址
__URL__ 当前模块的URL地址
__ACTION__ 当前操作的URL地址
__SELF__ 当前URL地址
__INFO__ 当前的PATH_INFO字符串
__EXT__ 当前URL地址的扩展名

模板替换:
../Public: 会被替换成当前项目的公共模板目录 通常是 /项目目录/Tpl/当前主题/Public/
__TMPL__: 会替换成项目的模板目录 通常是 /项目目录/Tpl/当前主题/
(注:为了部署安全考虑,../Public和__TMPL__不再建议使用)
__PUBLIC__:会被替换成当前网站的公共目录 通常是 /Public/
__ROOT__: 会替换成当前网站的地址(不含域名)
__APP__: 会替换成当前项目的URL地址 (不含域名)
__GROUP__:会替换成当前分组的URL地址 (不含域名)
__URL__: 会替换成当前模块的URL地址(不含域名)
__ACTION__:会替换成当前操作的URL地址 (不含域名)
__SELF__: 会替换成当前的页面URL

配置:
Home/Conf/config.php
'DEFAULT_MODULE' => 'Index', //默认模块

读取配置:
C();

Home/Common/common.php
写到里面的函数可以在本应用中所有模块的操作中使用

包含扩展类:
import("ORG.Util.Image");
ThinkPHP/Extend/Library/ORG/Util/Image.class.php

登录验证:

//权限认证
class CommonAction extends Action{
function _initialize(){
echo "先进行权限把控!";
}
}
//登录后
class IndexAction extends CommonAction{}
//登录页
class LoginAction extends Action{}

REWRITE方式:
1.apache必须支持mod_rewrite.so模块
LoadModule rewrite_module modules/mod_rewrite.so
2.网站根目录支持解析rewrite重写表达式文件.htaccess
3..htaccess里面书写的rewrite表达式

生成地址必须用U()方法

1."URL_MODEL" => "2"
0 http://localhost/test/index.php?m=Index&&a=index
1 http://localhost/test/index.php/Index/index
2 http://localhost/test/Index/index
3 http://localhost/test/index.php/?s=/Index/index
2.链接做成rewrite
<a href="{:U("show","","html")}">aaa</a>

在模板中使用PHP函数,要在函数前面加冒号

异常模板:
Home/Conf/conf.php
'TMPL_EXCEPTION_FILE' => APP_PATH.'/Public/exception.tpl'

异常模板中科院使用的异常变量:
$e['file'] 异常文件名
$e['line'] 异常发生的文件行数
$e['message'] 异常信息
$e['trace'] 异常的详细信息

操作中获取当前地址中的模板和操作:
1.$_GET['_URL_'][0]
$_GET['_URL_'][1]
2.MODULE_NAME
ACTION_NAME

空操作:
public function _empty(){}
空模块:
class EmptyAction extends Action{}

伪静态:
'URL_HTML_SUFFIX'=>'shtml'

url重定向:
$this -> redirect();

页面跳转
$this -> success("success",U("show"));

url路由:
'URL_ROUTER_ON' => true, //开启路由
'URL_ROUTE_RULES' => array( //定义路由规则
'news/:year/:month/:day' => array('News/archive', 'status=1'),
'news/:id' => 'News/read',
'news/read/:id' => '/news/:1',
),

url大小写:
'URL_CASE_INSENSITIVE' =>true

跨模块调用:
$test = A("Test");
$test->index();
A("项目中的模块");

$test=R("Test/index");
R("模块中的方法");

注:aa"bb
1.addslashes变成aa\"bb
2.htmlspecialchars变成aa\&quot;bb
3.mysql_escape_string变成aa\\&quot;bb
"

修改Dbmysql.class.php
public function escapeString($str) {
if (get_magic_quotes_gpc()){
return $str;
}
if($this->_linkID) {
return mysql_real_escape_string($str,$this->_linkID);
}else{
return mysql_escape_string($str);
}
}

M方法:
$user=new Model('User');
$user=M("User");

D方法:
$user = new UserModel('User');
$user = D("User");
//如果UserModel.class.php不存在,则使用model类

$model -> getLastSql() //获取model操作的最后一条sql语句

protected $tableName = "user";//设置model类在组合sql时真实的表名

$user -> getPk(); //获取主键

$model-> create();
//生成model对象中的数据对象data,可以智能过滤post中与字段不相符的下标
//自动验证
//自动完成

字段映射:
class UserModel extends Model{
protected $_map = array(
"name" => "username",
"pass" => "password"
);
}
//注意后面只能用D()和create()

自动完成:

protected $_auto=array(
array('password','md5',3,'function'),
);

CURD操作:
insert:
1.$model->add($_POST);
2.$model->create();
$model->add();
update:(save)
$user->create()
$user->save()
//
$user->save($_POST)
find:find
$user -> find($id);
$user -> where("id={$id}") -> find();
select:
$user -> select();
$user -> select($id);
$user -> where("id={$id}") -> select();
delete:
$user -> delete($id);
$user -> where("id={$id}") -> delete();
$user -> where(array('id'=>$id)) -> delete();

左连接:
原始:
select user.username,score.num from user left join score on user.id=score.uid;
TP:
$user -> join(' score ON user.id = score.uid') -> select();

模板注释:
{// 单行注释}
{/*多行注释 */}

快捷缓存(数据缓存)
默认缓存时间0
if(!S('rows')){
$user = M('User');
$rows = $user -> select();
S('rows',$rows);
}
$this -> rows = S('rows');

静态缓存(模板缓存)
HTML_CACHE_ON 是否开启静态缓存功能
HTML_FILE_SUFFIX 静态文件后缀 惯例配置的值是 .html
HTML_CACHE_TIME 默认的静态缓存有效期 默认60秒 可以在静态规则定义覆盖
'HTML_CACHE_ON'=>true,
'HTML_CACHE_RULES'=> array(
'ActionName' => array('静态规则', '静态缓存有效期', '附加规则'),
'ModuleName(小写)' => array('静态规则', '静态缓存有效期', '附加规则'),
'ModuleName(小写):ActionName' => array('静态规则', '静态缓存有效期', '附加规则'),
'*' => array('静态规则', '静态缓存有效期', '附加规则'),
//…更多操作的静态规则
)

删除session:
session(null);
session('[destroy]');
cookie('name',null);

图片缩放:
import('ORG.Util.Image');
$img = new Image();
$path = './Public/Uploads/Images/';
$src = $path.'a.jpg';
$dst = $path.'w_a.jpg';
$img->thumb($src,$dst,'',50,50);

1._initialize()方法;

TP的类中存在_initialize方法的话,在调用本类中的任何一个方法前都会先调用执行_initialize方法的代码。

2.杂项:
session支持
cookie
数据分页
文件上传
验证码
图片水印
ip定位

RBAC权限系统:
1.人
2.模块
3.方法

user表
role角色表
group表
module表
action表

//数组引用
$arr=array(1,2,3);
foreach($arr as &$val){
$val++;
}
print_r($arr);

强哥ThinkPHP学习笔记的更多相关文章

  1. 强哥jQuery学习笔记

    js对象: 1.js内置对象 2.js元素对象 3.jquery对象 js特效: 1.js元素对象 2.jQuery对象 jQuery学习: 1.核心函数 2.选择器 3.筛选 4.文档处理 5.属性 ...

  2. 强哥PHP学习笔记

    1.php的代码,必须放在.php的文件中,php代码必须写在<?php ?>之间. 2.//单行注释 /* 多行注释 */ 3.默认首页index.php index.html inde ...

  3. 强哥MySQL学习笔记

    数据库服务器:1.数据库2.数据表 数据表:1.表结构(字段)2.表数据(记录)3.表索引(加快检索) 表引擎:1.myisam2.innodb 查看表字段desc table;删除数据库:drop ...

  4. 强哥memcache学习笔记

    搭建memcache服务器:1.在内存中缓存数据2.数据形态以key->value memcache优点:1.快速缓存2.跨域登录memcache缺点:1.复杂的数据存取的操作2.不能永久保存数 ...

  5. 强哥JavaScript学习笔记

    js文件放header头最后,js代码放body体最后 js语言定位: js是基于对象的语言 php.java是面向对象的语言 定义变量: var str="hello world" ...

  6. 强哥HTML学习笔记

    html 浏览器的选择:1.火狐2.ie3.chrome4.mac5.opera 安装两款插件:1.firebug2.web develope html页面元素:1.doctype2.htmlhead ...

  7. 强哥CSS学习笔记

    html嵌套css样式:1.外部(推荐)2.内部3.内联(不推荐) css优先级1.内联2.id选择器3.class选择器4.标签 css长度单位:1.px2.em (14px) css选择器:常用选 ...

  8. thinkphp学习笔记10—看不懂的路由规则

    原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...

  9. thinkphp学习笔记9—自动加载

    原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...

随机推荐

  1. [源码解析] 并行分布式任务队列 Celery 之 Task是什么

    [源码解析] 并行分布式任务队列 Celery 之 Task是什么 目录 [源码解析] 并行分布式任务队列 Celery 之 Task是什么 0x00 摘要 0x01 思考出发点 0x02 示例代码 ...

  2. SVN讲解

    1.SVN是什么? 代码版本管理工具 它能记住你每次的修改 查看所有的修改记录 恢复到任何历史版本 恢复到已经删除的文件 2.SVN和Git相比,有什么优势? 使用简单,上手快 git没有目录级权限控 ...

  3. ubuntu16.04 安装opencv3.4.0

    参考 https://www.cnblogs.com/arkenstone/p/6490017.html https://blog.csdn.net/u013180339/article/detail ...

  4. 18. VUE created 方法作用

    一般可以在created函数中调用ajax获取页面初始化所需的数据. 实例的生命周期: 每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer ...

  5. redis实际应用-限流

    为什么要做限流 首先让我们先看一看系统架构设计中,为什么要做"限流". 旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票 ...

  6. day12.函数其它与模块1

    一.函数递归 函数的递归调用:是函数嵌套调用的一种特殊形式 具体指的是在调用一个函数的过程中又直接或者间接地调用自己,称之为函数的递归调用 函数的递归调用其实就是用函数实现的循环 # def f1() ...

  7. ML.NET 示例:图像分类模型训练-首选API(基于原生TensorFlow迁移学习)

    ML.NET 版本 API 类型 状态 应用程序类型 数据类型 场景 机器学习任务 算法 Microsoft.ML 1.5.0 动态API 最新 控制台应用程序和Web应用程序 图片文件 图像分类 基 ...

  8. 02- HTML网页基础知识与浏览器介绍

    1.认识网页 网页主要由文字,图像和超链接等元素构成.当然,除了这些元素,网页还可以包含音频,视频,以及flask等. 如图所示就是一个网页: 网页是如何形成的呢? 它是由前端人员写的代码,经过浏览器 ...

  9. BLDC有感FOC算法理论及其STM32软硬件实现

    位置传感器:旋转编码器          MCU:STM32F405RGT6          功率MOS驱动芯片:DRV8301 全文均假设在无弱磁控制的情况下 FOC算法理论 首先,我们要知道FO ...

  10. 【docker-compose】docker-compose环境安装

    docker-compose: 是一个用于定义和运行多容器 Docker 的应用程序工具,可以帮助我们可以轻松.高效的管理容器 安装: 1.安装pip 工具-目的是为了下载docker-compose ...