ThinkPHP是一个框架:MVC(采用面向对象思想)框架
市面上常用的框架:
zend framework yii thinkPHP
ThinkPHP: 有完善的中文资料,使用相对来说比较多
1. 下载ThinkPHP
解压之后生成两个文件:ThinkPHP是我们需要的核心代码,Examples 是例子
2、把THinkPHP复制到www文件夹中,然后新建一个index.php文件(与ThinkPhp同级文件夹)
1. 写上:
require("ThinkPHP/ThinkPHP.php");//根据参数的不同,ThinkPHP.php中设置了,会跳转到IndexAction.class.php(这里没有参数)
?>
3、如果在index.php中写:
define('APP_PATH','APP/');//添加这个生产的文件会到App文件中
define('APP_DEBUG',true);//调试模式不生成缓存文件
require("ThinkPHP/ThinkPHP.php");
?>
刚开始就有ThinkPHP,index.php新建一个App,Public文件夹
运行index.php会在App中生成许多文件夹,不会再与ThinkPHP同级文件夹生成文件
在没有写define('APP_DEBUG',true);时会产生缓存文件
修改配置文件后,需要删除一下缓存
在index.php中写上这句话define('APP_DEBUG',true);不产生缓存文件
4、分前台后台
在D:\wamp\www\Think_php\App\Lib\Action里面创建Admin,Home文件夹
在D:\wamp\www\Think_php\App\Tpl中也创建Admin,Home文件夹
二、ThinkPHP的使用
1、在 Lib保存了控制器目录(Action,和我们之前写的Controller)和模型目录(Model),Action里面是动作
2、在Tpl目录保存的是视图层的文件
3、Runtime 保存的是系统生成临时文件(缓存...)
4、控制器的写法:
GoodsAction.class.php
访问控制器的时候,通过 index.php?m=控制器&a=动作
但是由于这种写法不美观,而且SEO不友好()
于是TP框架写了一个pathinfo模式
index.php/控制器/动作
5、模型层
链接数据库----通过配置文件来实现的
现在获得模型,调用模型的方法
TP框架封装了模型对象,通过M()函数获得模型,参数是需要操作的表名
但是需要注意:这个表名需要首字母大写
调用select()方法可以获得所有的记录,相当于我们之前写的getAll()
6、视图层显示数据
assign()
display() 注意:display()可以带参数也可以不带参数
如果不带参数,控制器会自动去
视图层/模块分组(控制器名)/模板文件(命名通常是每个动作对应一个模板文件)
每个控制器在Tpl视图层都对应一个目录,
每个动作对应模板文件
如果是标量数据,在模板里面通过{变量名}来访问
如果是数组,在模板文件需要循环遍历这个数组,通过
在模板文件里面,访问数组的元素通过 {数组.元素下标} 或者通过 {数组[‘下标’]}
"{$list.id}"或{$list['name']}s
三、真实项目的部署
1、(1)项目要区分前台和后台(控制器,视图层)
(2)我们要将浏览器能够直接访问的文件(js,images,css)统一的放到一个目录里面(Pulblic), 然后将不能被浏览器直接访问的文件,放到另一个目录(App)
通常情况下,浏览器能够直接访问的文件,放到 public目录里
不能被浏览器直接访问文件放到 private App(保存项目的应用文件)
2、先将项目分为公共部分和私有的部分
如何将TP自动生成的MVC的结构保存到App目录里面,因为按照项目的部署思想,公共的文件(js,images,css)应该放到 Pulic目录,而项目的核心代码应该放到 App目录
3、是通过在入口文件,增加一个常量 APP_PATH
4、调试模式和部署模式(生产模式)
(1)调试模式:如果修改了数据表的数据,或者是修改了配置文件,需要将缓存删除,开启调试模式 ,不生成缓存文件 APP_DEBUG =》 true
(为了方便调试错误,关闭缓存, APP_DEBUG =》 true)
(2)部署模式:真正上线了,我们很少再会修改数据表的结构或者是配置文件,这个时候,我们会将调试模式关闭 APP_DEBUG => FALSE,生成缓存文件
(上线之后,开启缓存 APP_DEBUG => FALSE)
5、将项目分成前台和后台(控制器,视图)
通过修改配置文件,增加两个配置项:“
‘APP_GROUP_LIST’ => ‘Admin,Home’,
‘DEFAULT_GROUP’=>’Home’,
(2)访问的时候,要:入口文件/分组/控制器/动作
利用基本的模型完成一个增删改查
增加:
表单应该提交到这个地址,因为控制器的职责是接收数据,命令视图显示或者
在视图层的模板里面给我们们封装了一些伪常量(),保存的是一些路径
(3)、接收数据的时候,用一个数组来保存我们接收到的数据,但是需要注意:数组的下标和数据表的字段对应
注意:M()参数是当前操作的数据表,表名尽量首字母大写,因为window系统没问题,但是移植到Linux操作系统的话,会出错
(4)、只需要调用当前模型的add()方法(参数是需要插入的数据),即可向数据表插入一条数据,插入成功之后返回新纪录的id,如果失败返回false
public function add2(){
$data=array(
'id'=>'5',
'name'=>'juan',
'age'=>'12',
);
$goods_model=M('Xiao');
var_dump($goods_model->add($data));
}
不管向数据表中添加数据成功还是失败,应该给我们提示一些信息,当前控制器的方法
success(‘提示信息’,‘跳转到哪个页面’)-------0-成功之后的提示信息
error(‘提示信息’,‘跳转到哪个页面’) ----------- 失败之后提示的信息
if($goods_model->add($data)){
$this->success('添加成功','__URL__/goods');
}else{
$THIS->error('添加失败','__URL__/show');
}
(5)、删除:delete
public function del(){
$goods_id=$_GET['id'];
//var_dump($goods_id);
$goods_model=M('Xiao');
//var_dump($goods_model->delete($goods_id));
if($goods_model->delete($goods_id)){
$this->success('删除成功','__URL__/goods');
}else{
$this->error('删除失败','__URL__/goods');
}
}
删除成功之后返回1,失败返回false
(6)、查找:find
public function edit(){
$goods_id=$_GET['id'];
$goods_model=M('Xiao');
$list=$goods_model->find(1);
$this->assign('list',$list);
$this->display();
}
(7)、更新:save
调用模型的save()方法完成数据的更新
更新成功返回 1
更新失败返回 false
更新的时候要获得更新的这条记录的id,确切的说应该是这条记录的主键
public function update(){
$data=array(
'id' => $_POST['id'],
'name' => $_POST['name'],
'age' =>$_POST['age']
);
$goods_model=M('Xiao');
//var_dump($goods_model->save($data));
if($goods_model->save($data)){
$this->success('修改成功','__URL__/goods');
}else{
$this->error('修改失败','__URL__/goods');
}
}