请问下TP5类似添加文章代码有窍门吗?我写了一百行代码。。。

//添加文章
public function addArticle(){
    $data = request()->post();
    //一、处理缩略图
    //创建目录
    $path = 'static/image/'.date('ymd',time());
    $temp = 'temp';
    $thumb = 'upload';
    if(!file_exists($path)){
        mkdir($path,777,true);
    }
    if(!file_exists($temp)){
        mkdir($temp,777,true);
    }
    if(!file_exists($thumb)){
        mkdir($thumb,777,true);
    }
    $file = request()->file('thumb');
    if($file) {
        $info = $file->validate([ 'ext' => 'jpg,png,gif'])->rule('md5')->move($temp);//验证
        if($info){
          $pathname = $info->getPathname();
          $filename = $info->getFilename();
          $info = \think\Image::open($pathname);
          $img = $info->thumb(200, 200)->save($thumb.'/'. $filename);
          if($img){
              $data['imgPath'] = $thumb.'/'. $filename;
              unlink($pathname);//删除临时文件
          }
        }else{
            $info->getError();
        }
    }
    //二、处理 UEditor 内容中的图片信息
    $pattern = '/(\/)?(\w+\/)+\w+\.(jpg|png|gif)/';
    $res = preg_match_all($pattern,$data['content'],$row);
    if($res){
        //有图片信息就处理
        //1.检测临时图片文件是否存在
        foreach ($row[0] as $k=>$v){
            //由于只能以入口文件为参考点,所以preg_replacepu bublic之前的目录,获取临时文件路径
            $pattern2 = '/\/?(\w+\/)+public\//';
            $v = preg_replace($pattern2,'',$v);
            if(file_exists($v)){
                //2.转存图片,把临时路径存入数组,方面后面删除使用
                $this->linkinfo['old'][] = $v;
                $filename = pathinfo($v,PATHINFO_BASENAME);

                //3.替换内容图片路径,把新路径存入数组,方面后面删除
                $res = copy($v,$path.'/'.$filename);
                $this->linkinfo['new'][] = $path.'/'.$filename;
                if($res){
                    $data['content'] = str_replace($v,$path.'/'.$filename,$data['content']);
                }
            }else{
                $this->insertOne($data);
            }
        }//endforeach
        //4.数据插入数据库
        $res = $this->insertOne($data);
        if($res){
            //删除临时图片文件
            foreach ($this->linkinfo['old'] as $k=>$v){
                unlink($v);
            }
            return true;
        }else{
            //删除临时图片,另存图片,缩略图
            foreach ($this->linkinfo['old'] as $k=>$v){
               unlink($v);
            }
            foreach ($this->linkinfo['new'] as $k=>$v){
                unlink($v);
            }
                unlink($thumb.'/'. $filename);
            return false;
        }
    }else{
        //没有图片信息,直接处理
        $res = $this->insertOne($data);
        return $res;
    }
}
public function insertOne($data){
    $res = Article::insert($data);
    return $res;
}

虽然能用,但感觉没这么绕吧?顺便问下,怎么让Image::open()不直接跳错误页面,让我IF用啊

否认三连
浏览 1693回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP