thinkphp学习笔记13-15集
13集: ThinkPHP3.1.3使用视频教程--后台登录验证与自动运行方法_标清.flv
14集: ThinkPHP3.1.3使用视频教程--自定义SESSION处理DB驱动与添加Redis处理驱动_高清.mp4
15集: ThinkPHP3.1.3使用视频教程--通过后台管理许愿墙贴子与分页类的使用_高清.mp4
在editplus中 编译IndexAction.class.php文件时, 会提示" cannot find class 'Action'"?
这是因为, 你直接编译 / 直接访问的是 IndexAction.class.php 文件本身!
不能这样访问IndexAction.class.php本身文件, 要通过 入口文件 index.php/Index/Index/index来访问!
判断是否通过 登陆 进入后台页面的方法?
可以通过IS_POst, 或者通过判断 if(!isset($_SESSION['uid'] || !isset($_SESSION['username'])), 在登陆页面写入 session.
关于!的使用: 在判断if(...)的时候, 直接写, 如果要判断 "没有..., 不是..."的时候, 就直接在原来 的条件前面加!.
||: 表示两者当中的任意一个条件的时候, 用或/
也可以在后台 对应的 类 IndexAction 等 都继承自 CommonAction, 而不是继承自基类 Action,
在CommonAction中写自动函数:
public function _initialize(){...} // initialize前只有一个下划线
然后在_initialize()方法中去判断是否是通过登陆页面进入的, 就去判断是否设置了 $_SESSION['id']等变量, 否则就跳转到登陆页面...
thinkphp中删除session?
用session_unset();
session_destroy();
判断字符串中是否包含子字符串(子字符)? int index= strpos($hay, $needle); 从函数名称都可以看出来... // 不能用false来判断, 要用= 来判断
截取子字符串: substr($str, $start, $length)...
c/c++系列的{大括号通常是单独占一行, java, php系列的大括号{ 通常是在一行 的 末尾!
if(){}else{} ... if(){} elseif(){}
Dreamweaver设置文件编码: 默认的是utf-8编码, unicode 标准化表单: c(规范分解, 后跟规范合成)
将session不存入文件而是写入数据库?
默认的处理session是放在 .../wamp/tmp下的
tp处理session是在函数 THINK_PATH/common/functions.php中
if(C('SESSION_TYPE')) { // 读取session驱动 // 在自定义conf中配置: 'SESSION_TYPE'=> 'Db' 必须这样设置, 因为系统中只定义了SessionDb类
$class = 'Session'. ucwords(strtolower(C('SESSION_TYPE')));
// 检查驱动类
if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')) {
$hander = new $class(); // 生成了SessionDb 类
$hander->execute();
}else {
// 类没有定义
throw_exception(L('_CLASS_NOT_EXIST_').': ' . $class);
}
}
// 启动session
if(C('SESSION_AUTO_START')) session_start();
所以将session写入数据库的步骤就是:
- 配置 'SESSION_TYPE'=> 'Db',
- 创建session表 包含前缀: hd_session....
- 然后就是往 "$_SESSION['username']中写数据
ucwords ucfirst lcfirst
这些都是php本身自带的内置的函数:
ucwords('hello world'); // output is: Hello World
ucfirest('hello world'); Hello world
lcfirst('HELLO WORDL'); // hELLO WORDL
函数G写法的借鉴
在函数内部用static 关键字, 变量名的风格是: $_xxxx.
function G($start,$end='',$dec=4) {
static $_info = array();
static $_mem = array();
if(is_float($end)) { // 记录时间
$_info[$start] = $end;
}elseif(!empty($end)){ // 统计时间和内存使用
.........other codes/////
/**
* 优化的require_once
* @param string $filename 文件地址
* @return boolean
*/
function require_cache($filename) {
static $_importFiles = array();
if (!isset($_importFiles[$filename])) {
if (file_exists_case($filename)) { // file_exists_case()区分大小写的来判断文件是存在.
require $filename;
$_importFiles[$filename] = true;
} else {
$_importFiles[$filename] = false;
}
}
return $_importFiles[$filename];
}
页面布局版式上 注意 "内容横向上的长度 要控制, 适当的 多向纵向排列 :: 布局上不用table, 而在内容表现上可以考虑多采用表格/图表/图片的手段" 的用法
表格的内容可以实现 分组: thead, tbody, tfoot, 如果这样使用的话, 表格总是从 头/body/foot的顺序显示, 而不管他们书写的先后顺序
每个分组都要包含完整的 tr>...td>.../td> /tr>
<table border="1">
<thead>
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
</thead>
<tbody>
<tr>
<td>January</td>
<td>$100</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Sum</td>
<td>$180</td>
</tr>
</tfoot>
</table>
*{margin:0;padding:0}的写法叫css reset, 据说有性能问题...
=================================
tp如何写Redis 的session存储机制?
php的函数命名: 总是以某一类 / 要处理的对象关键字 / 等开头...
user-level自定义的session storage 机制:
session_set_save_handler(...)
这里有两个函数:
call_user_func()调用回调函数: 可以是全局函数, 也可以是类的静态/非静态方法.
有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数。Callback 函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包括静态类的方法。
一个 PHP 函数用函数名字符串来传递。可以传递任何内置的或者用户自定义的函数,除了语言结构如 array(),echo(),empty(),eval(),exit(),isset(),list(),print()和 unset()。
一个对象的方法以数组的形式来传递,数组的下标 0 指明对象名,下标 1 指明方法名。
对于没有实例化为对象的静态类,要传递其方法,将数组 0 下标指明的对象名换成该类的名称即可。
session_set_save_handler(callback $open....)的参数是回调函数. 由于这里调用的回调是类的方法, 所以采用数组的方式, 数组的第一元素是: 类名: 类名要是传引用; 第二个元素是 回调的函数名或方法名, 所以就是:
array(&$this, 'open'), array(&$this, 'close'),.....
session的处理机制有6个方法, 分成3组:
open($id, $name), close()| read($id), write($id, $data)|destroy($id), gc($maxLifeTime).
对于分组项目, 链接跳转地址的写法:
href={:U('Admin(分组)/MsgManager(控制器 模块)/index(方法))}
对于分组项目, 链接跳转地址的写法:
href={:U('Admin(分组)/MsgManager(控制器 模块)/index(方法))}
### thinkphp中引入css文件?
使用css标签: <css file='__PUBLIC__/Css/public.css' />
使用js标签 <js file='__PUBLIC__/Js/public.js' />
### tp中如何使用分页类?
<font color="red">
## // 这里直接就写 ORG开始了, 包括tp的很多地方, 系统在 内部 都已经规定了 路径的前面部分(前缀) 所以写路径的时候, 就直接按照tp的规定 写后面的路径部分就可以了.</font>
### 首先要导入 分页类: import('ORG/Util/Page'); // tp自动就设置了导入类库的路径是: Think_Path/Extend/Library/
Page类的new: 如果类有同名的函数则new时调用那个同名函数, 否则就调用 __construct函数.
Page的__construct构造函数需要两个变量: $totalRows, $listRows
Page类的成员变量.
有public成员 : $url, $parameter, $firstRow, $listRows, 注意其他有些是 protected成员, 如$totalRows $totalPages, $nowPage, $config等.
## 扩展的Page类中的函数?
Page类有三个函数,
1. 一个是Page类的构造函数 __construct
2. 一个是设置Page的保护成员$config的: setConfig. 因为可以在$config中 自定义的加入你要显示提示内容等等
3. 一个就是最重要的show( )函数, 它返回在 分页页面的最低处要显示的 字符串内容, 是通过 str_replace($this->config['theme']...)中的相关内容来实现的,你可以返回这个字符串, 并把它分配到 模板页.
## 使用左右alt键 的方法是: 放在空格键上的 左右大拇指!
## 方法页面的变量 必须经过分配后, 才能在模板页使用输出, 这是为了安全! 但是分配的方法有两种:一是使用assign, 另一种是使用$this->tpl_var = $var. 感觉后一种方法更直接!! 能够识别和习惯使用这种直接输出的方式: 实际上当前类中, 是没有定义这样的 成员变量的, 所以这种写法就是这样的...
<font color="red">而且可以分配多个变量, 写多个$this-> var1 = $var1; $this->var2 = $var2 而assign要通过数组来分配多个模板变量 </font>
M方法中, 最后的应该是select方法, 倒数接着是: limit, 再接着是order等...顺序不应该乱!
\#\#在thinkphp中 有的地方写 点语法不行, 比如在模板页使用传递过来的变量时, 就不能用点语法来写哦. 但是, 数组的写法总是可以的, 所以为了安全起见, 建议
数组/对象? 都用 [] 中括号数组的写法形式.
关于NULL的写法: 有些时候可以写成为null, 但是写成NULL是一定可以的, 也推荐写成NULL
编程中 关于加不加引号的问题?
一个核心, 一个宗旨就是 : 主要是进行分析语义:
函数, 只有当在调用的时候, 它表示是一个函数的时候, 才直接用, 不加引号
数字变量, 只有当它表示数字的时候, 才直接使用, 不加引号: 0和"0", 前者表示数字数值0, 后者表示字符0.
true/false, 只有当它表示 逻辑值时, 才直接使用, 不加引号.
等等.....
其他所有的地方, 根据语义分析, 凡是不是表示 其本义 的时候, 只是 引用/表示 它的名称的 时候, 都使用 字符串, 用引号括起来!!
thinkphp有两个重要的函数文件:
common.php是tp的 基础函数库
functions.php 是tp的标准模式下的 公共函数库.
****** 借鉴tp的设计思想: 设计一个函数时, 为了减少函数的个数, 尽量扩展/增加函数的功能! 那就是适当增加函数的参数, 在一个函数中可以实现多个/多种 功能! 如success和error, 除了显示提示信息时, 还可以 指定跳转地址:
success($message, [$jumpUrl], [$ajax])...
记住: success和error是Action类的方法, 因为它是表示 Action类中操作/方法 是否成功的/失败的 情况, 所以不是全局函数.
Db.class.php中的数据库类中的delete函数方法, 中的变量, 可以是数组, 如果是删除的主键, 可以直接传递该主键 , 如:
M('wish')->delete($id); 传统的方法是: M('wish')->where(array('id'=>$id))->delete();
U方法: 在php文件中, 就可以直接调用它就可以了, 在模板中要用: {:U('..')}...
U方法中地址的写法:
如果是 非分组, 就直接写方法名称(在本模块内部)
如过是 分组, 只有一个入口文件, 就要写完整: U('分组名称/模块名/方法名称')
###
thinkphp学习笔记13-15集的更多相关文章
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与 ...
- thinkphp学习笔记4—眼花缭乱的配置
原文:thinkphp学习笔记4-眼花缭乱的配置 1.配置类别 ThinkPHP提供了灵活的全局配置功能,ThinkPHP会依次加载管理配置>项目配置>调试配置>分组配置>扩展 ...
- SQL反模式学习笔记13 使用索引
目标:优化性能 改善性能最好的技术就是在数据库中合理地使用索引. 索引也是数据结构,它能使数据库将指定列中的某个值快速定位在相应的行. 反模式:无规划的使用索引 1.不使用索引或索引不足 2.使用了 ...
- Python学习笔记(15)- os\os.path 操作文件
程序1 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图: import os def countfile(path): dict1 = {} # 定义一个字典 all_files = ...
- RocketMQ学习笔记(15)----RocketMQ的消息模式
在前面学习ActiveMQ时,看到ActiveMQ可以是队列消息模式,也可以是订阅发布模式. 同样,在RocketMQ中,也存在两种消息模式,即是集群消费模式和广播消费模式. 1. 集群消费模式 跟A ...
- Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法
Ext.Net学习笔记13:Ext.Net GridPanel Sorter用法 这篇笔记将介绍如何使用Ext.Net GridPanel 中使用Sorter. 默认情况下,Ext.Net GridP ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- thinkphp学习笔记9—自动加载
原文:thinkphp学习笔记9-自动加载 1.命名空间自动加载 在3.2版本中不需要手动加载类库文件,可以很方便的完成自动加载. 系统可以根据类的命名空间自动定位到类库文件,例如定义了一个类Org\ ...
- thinkphp学习笔记8—命名空间
原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间 ...
- thinkphp学习笔记7—多层MVC
原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...
随机推荐
- HDFS文件和HIVE表的一些操作
1. hadoop fs -ls 可以查看HDFS文件 后面不加目录参数的话,默认当前用户的目录./user/当前用户 $ hadoop fs -ls 16/05/19 10:40:10 WARN ...
- bzoj 3223 splay模板题3
水题...貌似理解splay怎么维护数列了... 每个点维护一个size,它的位置就是它的size,区间翻转的话可以打标记,find的时候push_down,交换左右子树. #include<i ...
- ASCII码对照表
最近做东西常用到,所以就这里和收藏一下,需要注意的是10和13,在windows中文本java会把回车解释成是1310两个字节,在linux下面是10一个字节. 下面是将两个文件读成了二进制之后的结果 ...
- web前端性能优化
性能优化对于用户体验无疑是非常重要的,下面介绍一些性能优化的方法. 1.减少HTTP请求 http请求越多,那么消耗的时间越多,如果在加上网络很糟糕,那么问题就更多了.且如果网页中的图片.css文件. ...
- IOS VFL屏幕自适应
-(void)fun1{ //注意使用VFL,不用设置视图的frame UIView *view = [[UIView alloc] init]; view.backgroundColor = [UI ...
- js021-Ajax与Comet
js021-Ajax与Comet 本章内容: 使用XMLHttpRequet对象 使用XMLHttpRequet事件 跨域Ajax通信的限制 Ajax技术的核心是XMLHttpRequet对象 21. ...
- bootstrap panel 和table的使用
一.HTML中的页面内容 <div class="col-sm-12"> <!-- <div class="m-b-md" style= ...
- Zipf定律
http://www.360doc.com/content/10/0811/00/84590_45147637.shtml 英美在互联网具有绝对霸权 Zipf定律是美国学者G.K.齐普夫提出的.可以表 ...
- MySQL学习笔记——约束
1.约束是在表上强制执行的数据检验规则,约束主要用于保证数据库的完整性. 2.当表中数据有相互依赖性时,可以保护相关的数据不被删除. 3.大部分数据库支持下面五类完整性约束: - NOT NULL非空 ...
- 适合于图像处理方向的SCI期刊杂志列表【转】
适合于图像处理方向的SCI期刊杂志列表[转] 表1. 适合于图像处理方向的SCI期刊杂志列表 ISSN 期刊名 出版周期 1057-7149 IEEE TRANSACTIONS ON IMAGE ...