[thinkPHP5项目实战_13]新增文章界面附件上传
来源:互联网 发布:一键锁屏软件 编辑:程序博客网 时间:2024/05/01 00:12
1.新增文章验证器和控制器
根据[thinkPHP5入门实战_09]后台添加栏目及验证介绍新增栏目的方式构建新增文章的操作方法
构建验证器validate/Article.php:
<?phpnamespace 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:
<?phpnamespace 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存入数据库。
最终代码为:
<?phpnamespace 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.效果:
阅读全文
0 0
- [thinkPHP5项目实战_13]新增文章界面附件上传
- [thinkPHP5项目实战_12]文章管理界面创建
- [thinkPHP5项目实战_16]文章列表展示
- [thinkPHP5项目实战_17]文章编辑
- [thinkPHP5项目实战_18]友情链接界面搭建和数据添加
- [thinkPHP5项目实战_15]创建文章读取栏目列表
- [thinkPHP5项目实战_25]前台文章列表展示
- [thinkPHP5项目实战_26]前台文章关键词搜索
- 文章附件上传:
- [thinkPHP5项目实战_28]前台文章"相关文章"的功能完善
- [thinkPHP5项目实战_29]前台首页和文章搜索功能完善
- [thinkPHP5项目实战_06]引入前台页面
- [thinkPHP5项目实战_11]栏目修改
- [thinkPHP5项目实战_14]场景验证
- [thinkPHP5项目实战_19]模型添加数据
- [thinkPHP5项目实战_20]友情链接功能完善
- [thinkPHP5项目实战_22]管理员登录
- [thinkPHP5项目实战_27]前台文章内容展示
- 使用Maven管理Spring
- C++ 计数排序实例详解
- jq--清空文本框的内容
- 8-31 DAIRY
- RecyclerView 基本使用
- [thinkPHP5项目实战_13]新增文章界面附件上传
- 枚举的使用和原理
- python如何连接MySQL
- 解决js文件无法获得request.getContextPath的问题
- Swift_学习笔记_类型转换
- 自定义realm
- Java实现mongoDB的数据导入TIDB
- Java学习笔记(二十九):Map转Bean和Bean转Map
- Codeforces 758C Unfair Poll