下载
官网:下载了一个完整版的ThinkPHP5以及一个完全开发手册
配置
解压压缩包到根目录并且改名(方便以后操作)
目录结构
开发手册中有描述大概就是
application ->应用目录
extend->拓展库目录
public ->对外访问目录
runtime->运行时目录
vendor->插件目录
thinkphp->框架系统目录
入口文件
入口文件是 public 文件夹下面的index.php文件 这个文件会自动运行
application->index->controller->index.php文件的index方法
开启debug模式
application 文件夹下面有一个配置文件 config.php 把app_debug=>'false'
false改为true即可
url传值规则
访问http://www.myweb.com/tp5/public/index.php这个url时会自动访问到application index controller index.php这个文件中的index方法 是thinkphp默认的
http://www.myweb.com/tp5/public/index.php/index/index/index这个路径也可以访问到index,php中的index方法 前面的http:www.myweb.com/tp5/public/index.php是唯一入口文件 必须访问
后面的index/index/index分别代表模块/控制器/方法/
我们现在在application index(模块) controller index.php (控制器) 中新建了一个test方法
public function test($name,$id){
return $name.$id;
}
我们可以通过这条URL : http://www.myweb.com/tp5/public/index.php/index/index/test/name/jim/id/007
不仅访问到了test方法 还给方法传了值
index/index/test/
模块 控制器 方法
name/jim/id007
参数名/值/参数名/值
参数的传递不分先后
快速入门数据库
增删改查基本都有四种方法 即 原生语句 查询构造器方法 去前缀方法 以及利用db助手的方法
开始之前在本机数据库bbs中新建一个表think_data
建表语句如下:
create table think_data(
-> id int not null primary key auto_increment,
-> name varchar(255) not null,
-> status tinyint(2) not null default 0
-> )engine = myisam default charset=utf8;
application 下面有一个数据库配置文件database.php
在里面填写修改相关的信息 比如账号 密码 数据库名 前缀等信息 当需要使用到数据库的时候框架就会拿到这些信息自动连接 .
四种插入数据的方式
/*public function add($name,$status){
#原生方法
$sql = "insert into think_data(name,status) value('{$name}',{$status})";
$result = Db::execute($sql);
dump($result);//返回受影响行数 int(1)
#构造器方法必须传入完整的数据库名
$result = Db::table('think_data')
->insert(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//INT(1)
Db::table('表名')
->insert(['列名'=>值,'列名'=>值]);
库中的表统一了表前缀,在application/database.php中的也写明prefix => '前缀_' 就可以使用
在建表的时候已经人为加上think_ 并且也在databases.php中告诉了系统 think_是前缀
$result=Db::name('data')
->insert(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//INT(1)
#db助手
$db =db('data');
$result = $db->insert(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//(int1)
#db 助手返回自增长id
$result = db('data')->insertGetId(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//string(1) "5"
每一个[]符号中存放一行数据
}*/
原生方式 : sql db::execute(sql);
构造器: Db::table(全名)->insert([数据]);
去前缀 Db::name(去前缀)->insert([数据]);
db助手 db(去前缀) ->insert/insetyGetId([数据]);
使用数据库操作之前需要用到Db类 use think\Db;
4中修改方式
public function update($id,$name,$status){
#原生方法
$sql = "update think_data set name='{$name}',status='{$status}' where id ={$id}";
$result = Db::execute($sql);
dump($result);//INT(1) 返回受影响行数*/
//构造器方法
$result=Db::table('think_data')->where('id',"=","{$id}")->update(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//int(1)
///去前缀name方法
$result = Db::name('data')->where('id',"=","{$id}")->update(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//int(1)
//db助手
$db =db('data');
$result=$db->where('id',"{$id}")->update(['name'=>"{$name}",'status'=>"{$status}"]);
dump($result);//int(1)
//->where('列',"比较符",'具体值'),
}
查询方式依旧有四种 和上面基本相同
表对象->过滤条件->select();
下面以db对象简单举个例子
public function select(){
$db = db('data');
$result = $db->where('id',"<","3")->limit(2)->select();
dump($result);
}
返回的是一个多维数组 第一层是下标0123…n代表第几行数据
第二层是个关联数组 列名为索引
删除数据也是上面四种方法 这里以第四种db助手为例
public function delete ($id){
$db = db('data');
$db->delete($id);
//删除多个 $db->delete([1,2,3,]);
}
模版入门VC
1使用think空间下的Controller类use \think\Controller
2继承Controller类 extende Controller
以上两步可化成一步 extends \think\Controller
然后在方法中调用$this->fetch()
方法
系统就会自动寻找调用模版
比如 index类下面的index方法 系统会自动去调用
aplication index view index index.html
如果是test 方法中的fetch会自动去调用
aplication index view index test.html
总之就是到view视图文件夹下找到控制器名字的文件夹 然后进去找方法名字的模版文件
use \think\Controller;
class Index extends Controller
{
public function index(){
return $this->fetch();
//aplication/index/view/index/index.html
}
public function test(){
return $this->fetch();
//aplication/index/view/index/test.html
}
}
模版与数据库结合
主要是利用smarty模版技术 将查询到的数据分配给smarty系统调用assign()
方法 然后在模版中利用smarty模版技术将数据渲染出来
public function index(){
$db=db('data');
$result=$db->where('id','<','4')->select();
#smarty模板技术
$this->assign('result',$result);
return $this->fetch();
}
{$result.0.name}
smarty提供了两种遍历数组的方式
{foreach $result as $key=>$value}
{foreach $value as $k=>$v}{$k}:{$v}
{/foreach}
{/foreach}
{volist name="result" id="vo" offset='1' length='2' empty="暂时无数据"}
{$i}->{$vo.id} {$vo.name} {$vo.status}
{/volist}
留言板展示页面
aplication index controller 下面重新建一个bbs,php控制器
并且加入控制器的命名空间```namespace app\index\controller;
这样的话就可以通过入口文件访问到Bbs.php
并且会自动寻找Bbs类下面的index方法访问
然后继承控制器 这样就可以通过调用fetch方法 来调用模版了
模版放在 application index view bbs 文件夹下面 文件名是方法名
做Bbs之前专门为留言板在bbs 数据库中新建了一个表think_bbs
mysql> create table think_bbs(
-> id int not null primary key auto_increment,
-> name char not null ,
-> content text not null,
-> time char not null
-> ) engine = myisam default charset=utf8;
并且添加了一些测试数据进去
下面是show方法的代码 以及show.html的代码
public function show(){
#取出数据
$result = db('bbs')->select();
#分配给模板
$this->assign('result',$result);
return $this->fetch();
}
{volist name='result' id='vo' empty="没有数据哟"}
id:{$i} name:{$vo.name} content: {$vo.content} time:{$vo.time}
{/volist}
实现分页功能
上面页面显示出来的内容没有分页 在一页显示所有内容十分不美观 实现分页功能主要以下几步
select方法没有分页功能改为paginate()
方法 当传入一个参数时 代表一页又几行数据 当传入两个参数时 第一个参数代表一页又几行数据 第二个参数代表检索出多少数据
把show 方法代码改成下面这样:
public function show(){
#取出数据
$result = db('bbs')->where('id','>','0')->paginate(10);
#分配给模板
$this->assign('result',$result);
return $this->fetch();
}
}
同时修改show.html代码
Tp5简易留言板
{volist name='result' id='vo' empty="没有数据哟"}
- id:{$vo.id} name:{$vo.name} content: {$vo.content} time:{$vo.time}
{/volist}
{$result->render()}
就是在html循环的后面调用一下 render方法
Ajax无刷新分页
ajax.html代码如下;
留言展示-Tp5建议留言板
留言如下;
在输入框输入页码
跳转到 :
Bootstrap框架美化
html代码中引入bostrap框架 已经从官网下载好 并且放到了vendor 下面
!--bookstrap基于jquery实现-->
bootstrap会自动根据代码中class的值进行样式分配
BBS简单发布功能的实现
新建一个add方法用于处理发布功能
public function add(){
#获取表单数据
$name = input('param.title');
$content = input('param.content');
if(!empty($name)&&!empty($content)){
$db = db('bbs');
$db->insert(['name'=>"{$name}",'content'=>"{$content}",'time'=>time()]);
return $this->success('留言成功','/tp5/public/index.php/index/bbs/show');//封装好的跳转页面 继承了Controller 可以直接使用
}
return $this->fetch();
}
需要注意的是 获取表单中的数据这里采用的是input(param.name);
的方式 input只要传入param.表单的Name值 就可以获得数据 而不区分get与post方法
add.html代码如下
Tp5简易留言板发布
Tp5留言发布
发布留言
展示页字段处理
1 控制标题 不能让用户传任意长度的标题
配置php.ini文件 加载拓展库 并且配置mb_substr防止字符串乱码
mbstring.language = Chinese
mbstring.internal_encoding = UTF-8
mbstring.encoding_translation = On
mbstring.http_input = UTF-8
mbstring.http_output = UTF-8
mbstring.detect_order = UTF-8
mbstring.substitute_character = none
配置好之后更改show.html
{$vo.name|mb_substr=0,20,'utf-8'}{$vo.content|mb_substr=0,40,'utf-8'}
显示页面调用截取mb_substr方法
2调整显示时间
更改add代码 让传入时候 就传入有格式的字符串
$time =date('y-m-d H:i',time());
$db->insert(['name'=>"{$name}",'content'=>"{$content}",'time'=>$time]);
3按顺序显示
更改show代码 让查询出的数据 按降序排序
加入详情页功能
首先修改show.html代码使得点击标题可以调用控制球的view方法 并把此时的id 传给方法
{$vo.name|mb_substr=0,20,'utf-8'}
然后在bbs控制器中新增view方法 代码如下:
public function view(){
#接受href标签传来的id值
$id = input('param.id');
if(!empty($id)){
$result = db('bbs')->where('id',$id)->select();
$this->assign('result',$result);
}else{
return $this->error('没有数据');
}
return $this->fetch();
}
然后写详情页前端代码
Tp5简易留言板详情页
Tp5简易留言板
{$result.0.name}
{$result.0.content|default="这家伙很懒 什么也没留下"|}
- {$result.0.time}
此时项目代码就基本完成了
视图代码主要有add.html show.html以及上面的详情页view.html
add.html:
Tp5简易留言板发布
Tp5留言发布
发布留言
show.html:
Tp5简易留言板
留言展示-TP5简易留言板
留言如下:
ID 标题 内容 留言时间
{volist name='result' id='vo' empty="没有数据哟"}
{$vo.id} {$vo.name|mb_substr=0,20,'utf-8'} {$vo.content|mb_substr=0,40,'utf-8'} {$vo.time}
{/volist}
{$result->render()}
发布留言
还有一个控制器 Bbs.php
where('id','>','0')->order('id','desc')->paginate(10);
#分配给模板
$this->assign('result',$result);
return $this->fetch();
}
public function add(){
#获取表单数据
$name = input('param.title');
$content = input('param.content');
if(!empty($name)&&!empty($content)){
$db = db('bbs');
$time =date('y-m-d H:i',time());
$db->insert(['name'=>"{$name}",'content'=>"{$content}",'time'=>$time]);
return $this->success('留言成功','/tp5/public/index.php/index/bbs/show');//封装好的跳转页面 继承了Controller 可以直接使用
}
return $this->fetch();
}
public function view(){
#接受href标签传来的id值
$id = input('param.id');
if(!empty($id)){
$result = db('bbs')->where('id',$id)->select();
$this->assign('result',$result);
}else{
return $this->error('没有数据');
}
return $this->fetch();
}
}
?>
部署
准备一个云服务器以及一个备案解析好的域名
下载一个集成环境例如 studyphp(方便)
建一个数据库 bbs 以及表 think_bbs要能与上面的代码匹配
然后将整个tp5文件放入根目录
然后在默认的入口文件中做个网页跳转
header("locatio:http://www.blogwwm.com/tp5/public/index.php/index/bbs/show");
这样的话就可以通过与域名·
http://www.blogwwm.com
访问到留言板
顺便加上了背景音乐
以及网站logo
你可能感兴趣的:(PHP学习)