改虚拟主机

(用www.tp5.com直接访问替代localhost/blog/tp5/public)

1.host修改

位置C:\Windows\System32\drivers\etc

127.0.0.1 www.tp5.com
127.0.0.1 localhost

2.httpd.conf

Include conf/extra/httpd-vhosts.conf//去掉前面的#

3.httpd-vhosts.conf

<VirtualHost *:80>
#网站根目录
DocumentRoot "C:\wamp64\www\blog\tp5\public"
#域名
ServerName www.tp5.com
#这里配置欢迎首页面
DirectoryIndex index.html index.htm index.php
<Directory />
Options FollowSymLinks
#不允许别人修改我们的页面
AllowOverride None
#设置访问权限
order allow,deny
Allow from all
</Directory>

访问tp5控制器里面的方法

www.tp5.com/index/index/index//模块 控制器 方法

配置index里面的config.php

这里的config.php只是覆盖全局里面对应部分的配置,而并不是所有的。

return [
'view_replace_str'=>
['__PUBLIC__'=>SITE_URL.'/public/static/index',
'__ROOT__' => '/', ],
];//这个配置的作用是用__PUBLIC__代替一个路径

在public里面的index定义了一个常量

define('SITE_URL','http://127.0.0.1/blog/tp5');//用SITE_URL指向了站点根目录

这样

__PUBLIC__就能够代替http://127.0.0.1/blog/tp5//public/static/index这个路径

这样前台的模板文件js图片等都放到了这个路径而且用

__PUBLIC__就能够在html里面代替整个路径

模板的分离

把前端里面重复的部分提出来到

在view里面新建common文件夹里面包含下面的文件

foot.html

header.html

然后把重复部分删除掉用下面的代替

{include file='common/header'}
{include file='common/foot'}

后端做类似的操作

分理出top和left

数据表的建立

tp_admin(id,username,password)

tp_article(id,title,des,keyword,content,author,time,click,pic,state,cateid)

tp_cate(id,catename)

tp_tags(id,tagname)

点击链接修改

index修改如下内容

<li><a href="{:url('admin/lst')}">//主要改这里<span class="menu-text">管理列表</span><i class="menu-expand"></i></a></li>

lst里面主要改

<button type="button" tooltip="添加用户" class="btn btn-sm btn-azure btn-addon" onClick="javascript:window.location.href ='{:url('admin/add')}'">//主要改这里 <i class="fa fa-plus"></i> Add
</button>

数据库的连接

相关的database.php设置

主要设置如下

'type'            => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'blog',
// 用户名
'username' => 'root',
// 密码
'password' => '123456',
// 数据库表前缀
'prefix' => 'tp_',

add函数里面用数组接收用户名和密码

   $date=[
'username'=>input('username'),
'password'=>md5(input('password')),
];

使用db助手函数之前要引入

use think\Db;

用db('admin')->insert($date)插入数据到数据库如果成功,显示添加成功并返回到lst列表

        if(db('admin')->insert($date)){
return $this->success('添加成功','lst');
}else{
return $this->error('添加失败');
}

数据验证

前台js也会进行验证的,不过知道这种方法也是不错的

use think\Validate;//引入
 $validate	=	new	Validate([
'username'=>'require|max:25',
'password'=>'require|max:32']);//数据接收之前进行限制 $date=[
'username'=>input('username'),
'password'=>md5(input('password')),
];
if (!$validate->check($date))//如果不满足限制报错,结束程序
{$this->error($validate->getError()); die;}

验证场景

在Admin文件夹下面新建validate文件夹,里面建一个Admin.php内容如下

<?php
namespace app\admin\validate;
use think\Validate;
class Admin extends Validate
{
protected $rule=[
'username'=>'require|max:25',
'password'=>'require'
];//验证规则 protected $message=[
'username.require' =>'管理员名称必填',
'username.max'=>'名称不能大于25个字符',
'password.require'=>'管理员密码必填'
];//自定义违反规则提示文字 protected $scene=[
'add'=>['username'],
];//验证场景,例如在添加管理员里面的验证只用到验证规则的username的规则,如果想要用到多个规则可以'add'=>['username','password'],还可以这样'add'=>['username|max:25','password'],
}

写好的验证怎么用呢?

如下

$validate=\think\Loader::validate('Admin');
if (!$validate->scene('add')->check($date))
{$this->error($validate->getError());
die;}

管理员列表及分页

model.php

<?php
namespace app\admin\model;
use think\Model;
class Admin extends Model
{ }

控制器下面的lst方法如下使用之前要使用

use app\admin\model\Admin as AdminModel;//因为重名了我们as一下
    public function lst(){
$list = AdminModel::paginate(3);//每页显示三条记录
$this->assign('list',$list);
return $this->fetch();
}

lst模板下面

                            {volist name='list' id='vo'}
<tr>
<td align="center">{$vo.id}</td>
<td align="center">{$vo.username}</td>
<td align="center">
<a href="{:url('admin/edit',array('id'=>$vo['id']))}" class="btn btn-primary btn-sm shiny">//编辑操作
<i class="fa fa-edit"></i> 编辑
</a>
<a href="#" onClick="warning('确实要删除吗', '{:url('admin/del',array('id'=>$vo['id']))}')" class="btn btn-danger btn-sm shiny">//删除操作
<i class="fa fa-trash-o"></i> 删除
</a>
</td>
</tr>
{/volist}

管理员删除修改操作

    public function del(){
$id=input('id');
if($id!=2){
if(db('admin')->delete(input('id'))){
$this->success('删除管理员成功!','lst');
}else{
$this->error('删除管理员失败');
}
}else{
$this->error('初始化管理员不能删除');
}
}
    public function edit(){
$id=input('id');
$admins=db('admin')->find($id);
if(request()->isPost()){
$date=[
'id'=>input('id'),
'username'=>input('username'),
];
if(input('password')){
$date['password']=md5(input('password'));
}else{
$date['password']=$admins['password'];
}
if(db('admin')->update($date)){
$this->success("修改成功",'lst');
}else{
$this->error("修改失败");
}
return;
}
$this->assign('admins',$admins);
return $this->fetch();
}

tp5博客项目实战2的更多相关文章

  1. tp5博客项目实战1

    tp5博客项目实战 开发准备:环境wamp,windows系统为例.看实战博客,默认会搭建开发环境并且tp5框架已经至少有一定的基础. tp5的下载与安装 方法一:直接在官网下载拷贝到wamp你的项目 ...

  2. 分享Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站

    这是个什么的项目? 使用 Node.js + Koa2 + MySQL + Vue.js 实战开发一套完整个人博客项目网站. 博客线上地址:www.boblog.com Github地址:https: ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(一)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  6. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(一)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  9. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(二)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

随机推荐

  1. jquery关于多个显示隐藏

    今天做了一个关于多个栏目的隐藏与显示,内容为初始化显示6个栏目,点击按钮显示所有的栏目,在次点击隐藏出现的栏目 <div class="ftlt_z_navigation acer&q ...

  2. MongoDB 分片管理(二)查看网络连接

    1.1 查看连接统计 connPoolStats,查看mongos与mongod之间的连接信息,并可得知服务器 上打开的所有连接 1.2 限制连接数量

  3. P2679 子串 DP

    P2679 子串 DP 从字符串A中取出\(k\)段子串,按原顺序拼接,问存在多少个方案使拼接的字符串与字符串B相同 淦,又是这种字符串dp 设状态\(ans[i][j][k]\)表示A串位置\(i\ ...

  4. BZOJ 2038: [2009国家集训队]小Z的袜子

    二次联通门 : BZOJ 2038: [2009国家集训队]小Z的袜子 /* BZOJ 2038: [2009国家集训队]小Z的袜子 莫队经典题 但是我并不认为此题适合入门.. Answer = ∑ ...

  5. K Simple question (第十届山东理工大学ACM网络编程擂台赛 正式赛)

    题解:素数筛+唯一分解定理 可以把素数筛那部分放到while之外,减小时间复杂度. #include <stdio.h> #include <stdlib.h> #includ ...

  6. Smali语法基础

    Smali是什么 Smali是Android虚拟机的反汇编语言. 我们都知道,Android代码一般是用java编写的,执行java程序一般需要用到java虚拟机,在Android平台上也不例外,但是 ...

  7. Java枚举知识点

    近几天从单例模式及阿里开发手册中遇到枚举,之前没怎么关注过. 便学习一下,此次看了多方资料,并写Demo实现,记录下知识点,方便之后巩固. 枚举的两个优点: 1. 保证了类型安全:调用者无法随意传一个 ...

  8. 【转】Linux下软件安装的几种方式

    转自Linux下软件安装的几种方式 Linux 系统的/usr目录 Linux 软件安装到哪里合适,目录详解 Linux 的软件安装目录是也是有讲究的,理解这一点,在对系统管理是有益的 /usr:系统 ...

  9. Delphi BASE64单元EncdDecd的修改

    Delphi BASE64单元EncdDecd的修改 EncdDecd.pas两个函数声明: procedure EncodeStream(Input, Output: TStream);proced ...

  10. 咏南中间件D7客户端演示

    咏南中间件D7客户端演示 咏南中间件MORMOT(http.sys)支持D6.D7等老版本开发客户端.客户端使用TClientDataSet内存表控件,数据序列使用TynSerial类.