[thinkPHP5项目实战

xiaoxiao2021-02-28  111

1.新增文章验证器和控制器

根据[thinkPHP5入门实战_09]后台添加栏目及验证介绍新增栏目的方式构建新增文章的操作方法

构建验证器validate/Article.php:

<?php namespace app\admin\validate; use think\Validate; class Article extends Validate { //验证规则 protected $rule = [ //必须,长度不能超过25,名称不能重复 'title' => 'require|max:25|unique:article', ]; //验证提示 protected $message = [ 'title.unique' => '文章名称不能重复', 'title.max' => '文章名称不能大于25个字符', 'title.require' => '文章名称必须', ]; }控制器方法controller/Article.php:

<?php namespace app\admin\controller; use think\Controller; class Article extends Controller { public function lists() { return $this->fetch(); } public function add() { //reuqest方法继承于Controller,使用request助手函数判断请求方式 //使用助手函数input接收接收输入的值 if(request()->isPost()){ $data = [ 'title' => input('title'), 'keywords' => input('keywords'), 'desc' => input('desc'), 'content' => input('content'), 'time' => time(), ]; //对输入的内容进行验证,使用tp5推荐的验证器的方式 $validate = \think\Loader::validate('Article'); if($validate->check($data)){ var_dump($data);//如果验证没问题就输出信息 }else{ //验证失败输出提示信息 return $this->error($validate->getError()); } return; } return $this->fetch(); } }

2.文件上传

thinkPHP5提供了文件上传的方法:

ThinkPHP5.0对文件上传的支持更加简单。 内置的上传只是上传到本地服务器,上传到远程或者第三方平台的话需要自己扩展。 假设表单代码如下: <form action="/index/index/upload" enctype="multipart/form-data" method="post"> <input type="file" name="image" /> <br> <input type="submit" value="上传" /> </form> 然后在控制器中添加如下的代码: public function upload(){ // 获取表单上传文件 例如上传了001.jpg $file = request()->file('image'); // 移动到框架应用根目录/public/uploads/ 目录下 $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads'); if($info){ // 成功上传后 获取上传信息 // 输出 jpg echo $info->getExtension(); // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg echo $info->getSaveName(); // 输出 42a79759f284b767dfcb2a0197904287.jpg echo $info->getFilename(); }else{ // 上传失败获取错误信息 echo $file->getError(); } } move方法成功的话返回的是一个\think\File对象,你可以对上传后的文件进行后续操作。 在本项目中,用户可以选择是否上传文件,因此在需要在操作方法中进行一个判断是否有文件上传,

上传后的文件需要保存在/public/static/uploads目录下,因此需要修改路径为/static/uploads,

$data['pic']需要将文件在本地的位置存储到数据库中,因此需要使用字符串拼接出文件位置,

最后将$data存入数据库。

最终代码为:

<?php namespace app\admin\controller; use think\Controller; class Article extends Controller { public function lists() { return $this->fetch(); } public function add() { //reuqest方法继承于Controller,使用request助手函数判断请求方式 //使用助手函数input接收接收输入的值 if(request()->isPost()){ $data = [ 'title' => input('title'), 'keywords' => input('keywords'), 'desc' => input('desc'), 'content' => input('content'), 'time' => time(), ]; //判断表单是否上传了文件 if($_FILES['pic']['tmp_name']){ //获取表单上传的文件 $file = request()->file('pic'); // 移动到框架应用根目录/public/uploads/ 目录下 $info = $file->move(ROOT_PATH . 'public' . DS . '/static/uploads'); if($info){ //拼接文件路径 //使用date()方法计算出八位时间,上传到uploads的文件所在的文件名就是这八位时间 //使用$info->getFilename()方法获取文件名 $data['pic'] = '/static/uploads/'.date('Ymd').'/'.$info->getFilename(); }else{ // 上传失败返回错误信息 return $this->error($file->getError()); } }; //对输入的内容进行验证,使用tp5推荐的验证器的方式 $validate = \think\Loader::validate('Article'); if($validate->check($data)){ //文件上传完毕,表单验证完毕,存入数据库 $res = \think\Db::name('article')->insert($data); //添加判断,成功则跳转到lists方法 if($res){ return $this->success('增加文章成功'); }else{ return $this->error('增加文章失败'); } }else{ //验证失败输出提示信息 return $this->error($validate->getError()); } return; } return $this->fetch(); } }

3.效果:

转载请注明原文地址: https://www.6miu.com/read-41391.html

最新回复(0)