ThinkPHP学习笔记

ThinkPHP框架学习笔记

一、国内主流框架使用率

 


二、ThinkPHP框架是基于MVC思想的国产框架

1) MVC思想

 




 

2) 框架 = 毛坯房

框架是程序结构代码的集合,而不是业务逻辑代码。集合中包含了许多类、函数和功能类包。这个集合是按照有一定标准组成的功能体系。体系有很多设计模式,比如MVC等。


三、TP框架基础


特点:

1) 单一入口框架

2) 创建入口文件【ThinkPHP 3.1.3】

<?php

define('APP_NAME', 'Admin');

define('APP_PATH','./Admin/'); //注意APP后面加/,不加会有问题<br>

require('./ThinkPHP/ThinkPHP.php');//里面注意大小写

3) 目录结构【当前项目】

|common 存放当前项目的公共自定义函数
|Conf 存放当前项目的配置文件
|Lang 存放当前项目的语言包


|Lib 存放当前项目的控制器和模型C和M

||ACTION 存放MC中的Controller
||Behavior 存放thinkPHP行为管理的目录
||Model 存放项目的模型文件
||Widgt 组件

 

|Tpl存放项目模板【V】


|Runtime 存放当前项目的运行时文件
||Cache 存放模板缓存
||Data 存放数据目录
||Logs 存放日志
||Temp 存放数据缓存
||~runtime.php 编译后加载的文件
||Tpl 存放当前项目的模板文件

四、框架简单操作

1) ThinkPHP的运行流程:
1.加载ThinkPHP.phprequire('./ThinkPHP/ThinkPhp.php');
2.加载./thinkPHP/LIB/core路径下的核心文件
3.加载项目的文件->分析URL->调用相关的控制器
示例URL:http://localhost/index.php?m=index&a=index
m->module 模块 控制器
a->action 方法 action= 页面

2) 配置文件

1.大写的C方法就是config缩写 C('name');
2.开启dubug,define('APP_DEBUG',TRUE);
3.加载自定义配置文件user.php,就是在config.php里面引入’LOAD_EXT_CONFIG‘=>’user‘,并且自定义配置文件不是被项目定义,每次都会加载,建议不要自定义配置文件

3) URL模式【URL_MODEL】
0 普通模式 http://localhost/test/index.php?m=Index&a=index&id=1
1.PATHINFO模式 http://localhost/test/index.php/Index/index/id/1.html
2.重写模式 http://localhost/test/Index/index/id/1.html
3.兼容模式 http://localhost/test/index.php?s=/Index/index/id/1.html
建议使用PATHINFO模式
U方法 : 构造一个URL并返回
U('模块/方法',array('id' => 1),'xxxx html htm shtml',true/false,'localhost');
可以在配置文件中更改URL 模式
'URL_MODEL' => 0/1/2/3

4) 隐藏URL【隐藏入口文件】

thinkPHP中url模式中隐藏入口文件index.php的方法:
httpd.conf配置文件中加载了mod_rewrite.so模块 //在APACHE里面去配置
#LoadModule rewrite_module modules/mod_rewrite.so把前面的警号去掉

AllowOverride None 讲None改为 All 
在APACHE里面去配置 (注意其他地方的AllowOverride也统统设置为ALL)
<Directory "D:/server/apache/cgi-bin">
AllowOverride none 改 AllowOverride ALL
Options None
Order allow,deny
Allow from all
</Directory>

确保URL_MODEL设置为2,在项目的配置文件里写
return Array(
'URL_MODEL' => '2',
);

.htaccess文件必须放到跟目录下
这个文件里面加:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

5) URL伪静态【有利于搜索】

url伪静态在配置文件中配置'URL_HTML_SUFFIX'=>'shtml|html|xml'//URL伪静态后缀设置默认html 
设置伪静态有助于搜索引擎找到该页面,更轻易被蜘蛛爬虫抓取。

五、模板【界面】技术【中的标签 + {} + <?Php ...?>】

(一)建立项目模板

调用模板时使用$this->display(); 
调用建立好的模板 $this->display('test');
$this->display('Index/test')
$this->display()会默认调用相应与控制器同名的tpl文件夹下的html文件

 

(二)模板赋值和输出

在action里面 定义
$name='xxx';
$this->name=$name;
<?php
echo $name;
?>
第二种方式:
$this->assign("变量名","值")->assign();//可以连续赋值

♥$this->display();

 

(三)模板引擎

基于xml模板引擎

支持文件包含,多级标签循环

一次编译多次运行

支持变量输出

自动去掉html空白代码

 

(四) 模板引擎的变量输出和运算

建与之相对应的模板文件,在Tpl下新建index文件夹,在index.html中输出变量的方法如下:
1、{$me['name']}//数组的形式
2、{$me.name}//类java的形式
{//$me.name}//在模板中的注释方式
3、如果在控制器中未定义此变量又想输出,临时赋值方式为:{$me.sex|default='man'}
4、若想对变量进行+ - * / %运算,一定要使用{$me['age']}这种数组方式进行运算,如:{$me['age']+1}

 

(五)模板引擎的函数调用和系统参数输出

{$me['name']|md5|substr=0,5} //调用md5加密函数对数据进行处理,再截取字符长度为从第0个字符到第5个字符,最后输出
{$now|date='Y-m-d H:i:s',###} //$now为函数time()的原始参数,使用date进行日期格式规范化,###代表$now本身(使用它是为了避免编译程序误解$now为输出值)
{$Think.now} //Think自带的格式化的日期时间
{$Think.version} //Think的版本
{$Think.server.http_host} //连接的服务器地址

 

(六) 模板引擎的volist和foreach【都是标签】

$person=array( //定义一个数组
1=>array('name'=>'jack','age'=>'18'),
2=>array('name'=>'Tom','age'=>'19'),
3=>array('name'=>'Peter','age'=>'20'),
4=>array('name'=>'Mary','age'=>'21'),
);
$this->assign('person',$person); //将数组传输给模版
//展示数组所用函数,看起来很像HTML标签,但是不是.offset开始截取的第几个数据条,length截取的条数
//当name不为person时无法输出,id不为data时只输出非定义量(HTML内容)部分
<volist name='person' id='data' offset='1' length='2' empty='我没数据'>
{$data['name']}----{$data['age']}<br>
</volist>

//foreach函数不能直接进行截取,只能通过外部的方法进行
//当name不为person时无法输出,当item不为data时重复输出最后一个至数组长度耗尽
<foreach name='person' item='data'>
{$data['name']}----{$data['age']}<br>
</foreach>

 

(七)模板引擎之for循环【模板界面里的for循环】

eq(=), neq(!=), gt(>), egt(>=), lt(<), elt(<=), heq(===), nheq(!==)
<for start="开始值" end="结束值" step="步进值" comparison="符号(默认lt)" name="循环变量名" >
</for>  

 

(八)模板引擎之if判断

在模板中使用IF,一定要注意elseif 和 else 后面的结束 /
<if condition='$num lt 10'> num小于10
<elseif condition='$num gt 10/> num 大于 10
<else/> num 等于 10
</if>  

 

(九)模板引擎之switch判断标签

<?php?>

$fruit = 'pingguo';

$this -> assign('fruit',$fruit);

<html/>

模板中使用switch 标签,default 注意 /
<switch name='name'>
<case value='pingguo'>我不爱吃</case>
<case value='hongzao|putao'>我爱吃</case>
<default/> 其他的视情况而定
</switch>  

<hr/>

 

(十)模板引擎之比较符【相当于if判断】

<比较标签 name='变量名' value='比较的值'></比较标签>
<eq name='num' value='10'>num=10<else/> num!=10</eq>方法一
<compare name='num' value='10' type='eq'>num=11<else/> num!=11</compare>方法二

 

(十一)区间判断【in/notin = range betwewn/notbetwwen】 

<in name='num' value='1,2,3'>在</in>(判断是否在1,2,3之间)
<notin name='num' value='1,2,3'>不在</notin>
<in name='num' value='1,2,3'>在<else/>不在</in>
<between name='num' value='1,10'>在</between>(判断是否在1到10之间)
<notbetween name='num' value='1,10'>在</notbetween>
<between name='num' value='1,10'>在<else/>不在</between>
<range name='num' value='1,2,3' type='in'>在<else/>不在</range>(type的值在3.1版本中只能为in/notin,而在3.2版本中可以用in/notin/between/notbetween只能替换in和notin

 

(十二)模板引擎之三元运算符【在html页中{ $num>10?大于10:不大于等于num } 

 

(十三)模板案例实战

一、循环判断

<foreach name='person' item='data'>
<egt name='data.age' value='18'>{$data.name}已经成年了<else/>还没是个孩子</egt><br/>
</foreach>

二、还可以使用php原生态的书写方式:
方式一:
<php>echo $name.'年龄是'.$num.'岁';</php><br />建议使用

方式二://一般不推荐这种方式,有可能不能识别
<?php echo $name; ?>

 

六、ThinkPHP框架的调试方法

 

七、数据库操作

1. 数据库配置文件配置

'DB_TYPE'=>'mysql', //数据库类型

'DB_HOST'=>'localhost,localhost1,localhost2', //数据库服务器地址,多服务器用逗号隔开

'DB_NAME'=>'think', //数据库名

'DB_USER'=>'root', //数据库用户名

'DB_PWD'=>'', //数据库密码

'DB_PORT'=>'3306', //数据库端口

'DB_PREFIX'=>'tk_', //数据库表前缀

//开启主从读写分离

'DB_RW_SEPARATE'=>true, //读取从服务器,写入主服务器,实现负载均衡

//多个主数据库服务器

'DB_MASTER_NUM'=>'2',

2. 实例化模型【new XX】

 

1.实例化基础模型

$user=new Model('admin');//表名,表前缀,数据库连接信息

$user=M("pro");//表名,表前缀,数据库连接信息

$data==$user->select();

2.实例化自定义模型继承Model类

$user=new adminModel();

$user=D("admin");//先找自定义模型,找不到会自动切换成M()方法

echo $user->getinfo();

 

3.实例化公共模型可以上自定义模型继承公共模型

$user=new CommonModel();

echo $user->strmake("aaa");

$user=D("User");

echo $user->strmake("abc");

 

4.实例化空模型项目里不推荐,原生的sql语句,除非特别复杂的sql语句

$model=M();

$sql="select * from imooc_admin";

$data=$model->query($sql);//select

$model->execute($sql);//update,insert,delete返回影响的行数

 

3. 数据库操作—添加数据

//add创建,创建多条数据

M('user')->add($data)


$data是数组,返回插入的id

M('user')->addAll($data),

此处$data为内嵌多个数组,这里addAll(),插入多条数据,只适合mysql数据库

 

调试】:

1.M()->getLastSql();获取所执行的sql语句

2.Conf—>debug.php->显示页面trace信息->$this->dieplay();

4. 数据库操作—数据查询

1.直接用字符串进行查询

$data=M('User')->where('id=1')->select();
2.使用数组方式进行查询

$where['user_name']="xiaoming";//查询条件

$where['_logic']='or';//查询方式

3. 表达式查询

//eq(=) neq(!=) egt(>=) gt(>) lt(<) elt(<=)

//like(like) between (between and) not between(not between and) in (in) not in (not in) and(and[默认])

//$where['字段名']=array('表达式',查询条件);

//$where ['id']=array('lt',3);//查询<3的数据

$where['id']=array('between','1,8');//查询id是1到8的数据

$where['id']=array('lt'3);//查询id<3的数据

$where['user_name']=array('like',array('%ming','xiao%'));//查询user_name模糊等于%ming 模糊等于xiao的数据

4.区间查询

where['id']=array(array('gt',100),array('lt',3),'or');//查询>100 或者<3的数据

5.混合查询

$where['id']=array('gt' 10);//查询id>10的数据

$where['_string']='scoer>10';// 查询scoer>10的数据

6.统计用法

// count统计数量 可选

// max 获取最大值 必须传入 统计的字段名

// min 获取最小值 必须传入 统计的字段名

// avg 平均值 必须传入 统计的字段名

// sum 求和 必须传入 统计的字段名

$data =M('user')->min('id');//查询语句(其中id是传入的值)

5. 数据库操作—更新数据

$update['score'] = 60;

$where['id'] = 1;

$data = M('User')->where($where)->save('update');

$data = M('User')->where($where)->select();

dump($data);

6. 数据库操作—删除数据

 方法1,利用where删除

$where["id"]=21;
$data=M("admin")->where($where)->delete();

方法2,直接在delete方法中传入主键值

echo M("admin")->delete(20);

7. ThinkPHP CRUD 连贯操作—order排序

order(字符串) 多个条件用英文逗号隔开

$data = M('User')->order('score desc,id asc')->select();

dump($data);

8. ThinkPHP CRUD 连贯操作—field($string,false/true);

field($string,false) $string 传入多个字段名,多个字段用逗号分隔,

// 第二操作默认为false,即查$string中的字段。设为true时,查询除$string之外的所有字段

// 这些连续操作都必须在select方法之前 

$data= M("admin")->field('username,email')->order('username,id asc')->select();

dump($data);

9. ThinkPHP CRUD 连贯操作—

10. ThinkPHP CRUD 连贯操作—

11. ThinkPHP CRUD 连贯操作—

12. ThinkPHP CRUD 连贯操作—

13. ThinkPHP CRUD 连贯操作—

14. 

八、命名范围的使用

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值