前端页面insert.html
<form action="{:url('index/save')}" class="form-horizontal" method="post" id="login" enctype="multipart/form-data" > <input type="hidden" name="user_id" value="{$Think.session.user_id}" /> <div class="form-group"> <label for="title" class="col-sm-2 control-label">标题</label> <div class="col-sm-6"> <input type="text" class="form-control" name="title" id="title" placeholder="title"> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">分类</label> <div class="col-sm-6"> <select name="cate_id" id="" class="form-control"> {volist name='cateList' id='cate'} <option value="{$cate.id}">{$cate.name}</option> {/volist} </select> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">内容</label> <div class="col-sm-6"> <textarea name="content" class="form-control" style="min-height: 180px;"></textarea> </div> </div> <div class="form-group"> <label for="title_img" class="col-sm-2 control-label">标题图片</label> <div class="col-sm-6"> <input type="file" name="title_img" id="title_img"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-6"> <button type="submit" class="btn btn-primary" id="submit">发布</button> </div> </div> </form>
后台:
模型 ArtCate.php
<?php namespace app\common\model; use think\Model; /** * zh_user表的模型 */ class ArtCate extends Model { protected $pk = 'id';//默认主键 protected $table = 'zh_article_cate';//默认数据表 // 第一种方式是全局开启,在数据库配置文件中进行设置: // 'auto_timestamp' => true, // protected $autoWriteTimestamp = true;//我已经在数据库配置文件中进行设置,这里不需要设置,不用设置为false即可 // 定义时间戳字段名 protected $createTime = 'create_time'; protected $updateTime = 'update_time'; //定义时间格式 protected $dateFormat = 'Y年m月d日'; //开启自动模式 protected $auto = [];//无论是新增或更新都要设置的字段 //仅新增的有效(参数是字段名) protected $insert = ['create_time', 'status'=>1]; //仅更新的设置有效(参数是字段名) protected $update = ['update_time']; }
模型 Article.php
<?php namespace app\common\model; use think\Model; /** * zh_user表的模型 */ class Article extends Model { protected $pk = 'id';//默认主键 protected $table = 'zh_article';//默认数据表 // 第一种方式是全局开启,在数据库配置文件中进行设置: // 'auto_timestamp' => true, // protected $autoWriteTimestamp = true;//我已经在数据库配置文件中进行设置,这里不需要设置,不用设置为false即可 // 定义时间戳字段名 protected $createTime = 'create_time'; protected $updateTime = 'update_time'; //定义时间格式 protected $dateFormat = 'Y年m月d日'; //开启自动模式 protected $auto = [];//无论是新增或更新都要设置的字段 //仅新增的有效(参数是字段名) protected $insert = ['create_time', 'status'=>1, 'is_hot'=>0, 'is_top'=>0]; //仅更新的设置有效(参数是字段名) protected $update = ['update_time']; }
文章验证器 Article.php
<?php namespace app\common\validate; use think\Validate;//调用框架的验证类 class Article extends Validate { protected $rule = [ 'title|标题' => 'require|length:2,50|chsAlphaNum', // 'title_img|图片' => 'require', 'content|文章内容' => 'require', 'user_id' => 'require', 'cate_id' => 'require', ]; }
控制器(重要)保存文章 index.php
一开始记得引入TP框架类问价和自定义类问价
use app\common\model\ArtCate;
use app\common\model\Article;
use think\facade\Request;
/** * 保存文章 */ public function save() { //判断提交类型是否为post if(Request::isPost()){ //获取用户提交的文章信息 $data = Request::post(); // halt($data);//测试,打印输出 $rule = 'app\common\validate\Article'; $res = $this->validate($data, $rule); if($res !== true){ //验证失败 $this->error($res); }else{ //判断是否有选择上传文件,选择了文件才进行验证等等步骤 if(!empty($_FILES['title_img']['tmp_name'])){ // echo '已选择文件'; //验证成功,获取上传的信息 $file = Request::file('title_img'); //文件信息验证成功后,再上传服务器指定目录,以public为起始目录 $info = $file->validate([ 'size'=>1000000, 'ext'=>'jpeg,jpg,png,gif', ])->move('uploads/'); //判断是否上传成功 if($info){ $data['title_img'] = $info->getSaveName(); }else{ $this->error($file->getError()); } } //将数据插入数据表中 if(Article::create($data)){ $this->success('文章发布成功!', 'index/index'); }else{ $this->error('文章发布失败!'); } } }else{ $this->error('请求类型错误!'); } }
数据表结构