Browse Source

修改保存删除文件逻辑,根据array_diff方法对比旧数据数组和新数据数组,进行创建和删除文件操作

wechat_public_accounts
linyaostalker 5 years ago
parent
commit
cb1f7310ea
  1. 27
      backend/logic/file/FileManager.php
  2. 23
      vendor/antgoods/goods/src/logic/goods/GoodsManager.php

27
backend/logic/file/FileManager.php

@ -29,7 +29,8 @@ class FileManager
* @return bool|int|string * @return bool|int|string
* 根据文件拓展名在$extension中查找对应的文件类型,若不存在则返回false * 根据文件拓展名在$extension中查找对应的文件类型,若不存在则返回false
*/ */
public function searchType($array, $keyword){
public function searchType($array, $keyword)
{
foreach($array as $key => $value){ foreach($array as $key => $value){
foreach ($value as $k => $v) { foreach ($value as $k => $v) {
if($v == $keyword){ if($v == $keyword){
@ -47,16 +48,15 @@ class FileManager
* @return array * @return array
* 根据临时文件id(字符串)将临时文件保存在文件中 * 根据临时文件id(字符串)将临时文件保存在文件中
*/ */
public function saveTemFileToFile($temFIleIdStr, $ownId, $ownType)
public function saveTemFileToFile($temFIleIdArr, $ownId, $ownType)
{ {
if(!$temFIleIdStr || !$ownId) {
if(!$temFIleIdArr || !$ownId) {
return ['status' => false, 'info' => '参数错误']; return ['status' => false, 'info' => '参数错误'];
} }
$img_id_arr = explode(',', $temFIleIdStr);
$i = 1; $i = 1;
$first_file_id = 0; $first_file_id = 0;
foreach ($img_id_arr as $key => $value) {
foreach ($temFIleIdArr as $key => $value) {
$tem_file = TemFile::findOne($value); $tem_file = TemFile::findOne($value);
if(!$tem_file) { if(!$tem_file) {
@ -99,4 +99,21 @@ class FileManager
return ['status' => false]; return ['status' => false];
} }
} }
/**
* @param $fileIdArr
* 删除file表中的文件
*/
public function deleteFile($fileIdArr)
{
if($fileIdArr){
foreach ($fileIdArr as $key => $value) {
$file_model = File::findOne($value);
if($file_model){
$file_model->is_delete = File::IS_DELETE_YES;
$file_model->save();
}
}
}
}
} }

23
vendor/antgoods/goods/src/logic/goods/GoodsManager.php

@ -7,24 +7,35 @@ namespace antgoods\goods\logic\goods;
class GoodsManager class GoodsManager
{ {
/** /**
* @param $fileIdStr
* @param $newFileIdArr
* @param array $oldFileIdArr
* @param $goodsModel * @param $goodsModel
* @param int $filetype * @param int $filetype
* @return bool * @return bool
* 判断file逻辑文件FileManager和file模型文件是否存在,若存在,则执行文件保存操作
* 保存新文件,删除不需要的文件操作
*/ */
public function saveFile($fileIdStr, $goodsModel, $filetype = 1)
public function saveFile($newFileIdArr, $oldFileIdArr = [], $goodsModel, $filetype = 1)
{ {
//判断类名是否存在 //判断类名是否存在
if(!class_exists('\backend\logic\file\FileManager') || !class_exists('\common\models\ars\File')) { if(!class_exists('\backend\logic\file\FileManager') || !class_exists('\common\models\ars\File')) {
return false; return false;
} }
//需要新建的文件id
$create_file_id_arr = array_diff($newFileIdArr, $oldFileIdArr);
//创建文件
$class = new \backend\logic\file\FileManager(); $class = new \backend\logic\file\FileManager();
$res = $class->saveTemFileToFile($fileIdStr, $goodsModel->id, $filetype);
$create_file_res = $class->saveTemFileToFile($create_file_id_arr, $goodsModel->id, $filetype);
//需要删除的文件id
$del_file_id_arr = array_diff($oldFileIdArr, $newFileIdArr);
//删除文件
$class->deleteFile($del_file_id_arr);
if($res['status'] || $filetype == \common\models\ars\File::OWN_TYPE_GOODS_INDEX) {
$goodsModel->image = $res['first_file_id'];
if($create_file_res['status'] || $filetype == \common\models\ars\File::OWN_TYPE_GOODS_INDEX) {
$goodsModel->image = $create_file_res['first_file_id'];
$goodsModel->save(); $goodsModel->save();
} }

Loading…
Cancel
Save