tp5博客项目实战2

改虚拟主机

(用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();
    }
posted @ 2019-11-22 19:29  陈国松  阅读(512)  评论(0编辑  收藏  举报