mirror of
https://github.com/crmeb/CRMEB.git
synced 2026-10-28 21:40:50 +00:00
feat(图片处理): 统一处理图片路径,确保存储相对路径并对齐接口返回
This commit is contained in:
parent
161050c4aa
commit
d04e69ec1f
@ -43,6 +43,7 @@ class ProductSaveServices extends BaseService
|
||||
{
|
||||
$data = $this->fillDefaults($data);
|
||||
$this->validate($data);
|
||||
$data = $this->stripImageUrl($data);
|
||||
$data = $this->prepareData($data);
|
||||
|
||||
if ($id > 0) {
|
||||
@ -167,6 +168,39 @@ class ProductSaveServices extends BaseService
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 图片路径去站点域名前缀
|
||||
* 编辑详情接口回传的 slider_image/推荐图/SKU 规格图可能带 site_url 前缀,入库统一还原为相对路径
|
||||
* @param array $data
|
||||
* @return array
|
||||
*/
|
||||
protected function stripImageUrl(array $data): array
|
||||
{
|
||||
$siteUrl = rtrim((string) sys_config('site_url'), '/');
|
||||
if ($siteUrl === '') {
|
||||
return $data;
|
||||
}
|
||||
$strip = static function ($path) use ($siteUrl): string {
|
||||
$path = str_replace('\\', '/', (string) $path);
|
||||
return str_starts_with($path, $siteUrl . '/') ? substr($path, strlen($siteUrl)) : $path;
|
||||
};
|
||||
if (!empty($data['slider_image']) && is_array($data['slider_image'])) {
|
||||
$data['slider_image'] = array_map($strip, $data['slider_image']);
|
||||
}
|
||||
if (!empty($data['recommend_image']) && is_string($data['recommend_image'])) {
|
||||
$data['recommend_image'] = $strip($data['recommend_image']);
|
||||
}
|
||||
if (!empty($data['attrs'])) {
|
||||
foreach ($data['attrs'] as &$attr) {
|
||||
if (is_array($attr) && !empty($attr['pic']) && is_string($attr['pic'])) {
|
||||
$attr['pic'] = $strip($attr['pic']);
|
||||
}
|
||||
}
|
||||
unset($attr);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 数据校验
|
||||
* @param array $data
|
||||
|
||||
@ -157,7 +157,11 @@ class ProductServices
|
||||
$product['is_virtual'] = (int)($product['is_virtual'] ?? 0);
|
||||
|
||||
// ============ slider_image(由 Model 获取器自动解码为数组)============
|
||||
$product['slider_image'] = $product['slider_image'] ?? [];
|
||||
// 图片拼站点域名(对齐列表口径);保存链路 ProductSaveServices 会去域名还原为相对路径入库
|
||||
$siteUrl = sys_config('site_url');
|
||||
$product['slider_image'] = set_file_url($product['slider_image'] ?? [], $siteUrl);
|
||||
$product['recommend_image'] = set_file_url($product['recommend_image'] ?? '', $siteUrl);
|
||||
$product['image'] = set_file_url($product['image'] ?? '', $siteUrl);
|
||||
if (!empty($product['slider_image'])) {
|
||||
$product['image'] = $product['slider_image'][0] ?? '';
|
||||
}
|
||||
@ -177,6 +181,7 @@ class ProductServices
|
||||
foreach ($product['attrs'] as &$attr) {
|
||||
$attr['is_vip_price'] = $attr['vip_price'] ?? 0;
|
||||
$attr['is_sub_price'] = $attr['brokerage'] ?? 0;
|
||||
$attr['pic'] = set_file_url($attr['pic'] ?? '', $siteUrl);
|
||||
}
|
||||
unset($attr);
|
||||
$product['attr'] = $product['attrs'][0] ?? [];
|
||||
@ -204,6 +209,7 @@ class ProductServices
|
||||
$map = array_column($list, null, 'product_id');
|
||||
foreach ($recommendIds as $rid) {
|
||||
if (isset($map[$rid])) {
|
||||
$map[$rid]['image'] = set_file_url($map[$rid]['image'] ?? '', $siteUrl);
|
||||
$recommend_list[] = $map[$rid];
|
||||
}
|
||||
}
|
||||
@ -411,9 +417,12 @@ class ProductServices
|
||||
->toArray();
|
||||
|
||||
// 字段映射:eb_product_center列名 → 前端期望字段名
|
||||
// 图片拼站点域名(对齐 CenterProductServices::getList 口径;编辑详情接口保持原始路径,避免回存绝对地址污染库)
|
||||
foreach ($list as &$item) {
|
||||
$item['store_name'] = $item['name'] ?? '';
|
||||
$item['sort'] = $item['sort_order'] ?? 0;
|
||||
$item['image'] = set_file_url($item['image'] ?? '');
|
||||
$item['slider_image'] = set_file_url($item['slider_image'] ?? []);
|
||||
}
|
||||
unset($item);
|
||||
|
||||
|
||||
@ -73,6 +73,11 @@ class ProductServices
|
||||
$limit,
|
||||
['id', 'name as store_name', 'image', 'price', 'stock', 'sales', 'is_show', 'sort_order', 'add_time']
|
||||
);
|
||||
// 图片拼站点域名(对齐 CenterProductServices::getList 口径;编辑详情接口保持原始路径)
|
||||
foreach ($list as &$item) {
|
||||
$item['image'] = set_file_url($item['image'] ?? '');
|
||||
}
|
||||
unset($item);
|
||||
return compact('total', 'list');
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user