图片URL地址要保存为相对路径

存在数据库中的图片路径数据,要存放为相对路径,不要写死。这一点很重要

+----+---------------------------+------+-------------+-------------+

| id | url | from | delete_time | update_time |

+----+---------------------------+------+-------------+-------------+

| 1 | /banner-1a.png | 1 | NULL | NULL |

| 2 | /banner-2a.png | 1 | NULL | NULL |

| 3 | /banner-3a.png | 1 | NULL | NULL |

| 4 | /category-cake.png | 1 | NULL | NULL |

| 5 | /category-vg.png | 1 | NULL | NULL |

| 6 | /category-dryfruit.png | 1 | NULL | NULL |

| 7 | /category-fry-a.png | 1 | NULL | NULL |

| 8 | /category-tea.png | 1 | NULL | NULL |

| 9 | /category-rice.png | 1 | NULL | NULL |

| 10 | /product-dryfruit@1.png | 1 | NULL | NULL |

+----+---------------------------+------+-------------+-------------+

10 rows in set (0.00 sec)

然后根据服务器配置,拼接得到完整的路径,再返回给客户端。

效果

假如服务器上图片的根 URL 是 http://z.cn/images,那么要返回的数据应该如下

{

"id": 1,

"name": "首页置顶",

"description": "首页轮播图",

"items": [

{

"key_word": "6",

"type": 1,

"img": {

"url": "http://z.cn/images/banner-4a.png"

}

},

{

"key_word": "25",

"type": 1,

"img": {

"url": "http://z.cn/images/banner-2a.png"

}

},

{

"key_word": "11",

"type": 1,

"img": {

"url": "http://z.cn/images/banner-3a.png"

}

},

{

"key_word": "10",

"type": 1,

"img": {

"url": "http://z.cn/images/banner-1a.png"

}

}

]

}

实现

要实现这个需求。可以利用 ThinkPHP 5 提供的获取器来实现。

首先是创建一个配置文件:application\extra\setting.php

/**

* 自定义配置文件

*/

return [

'img_prefix' => 'http://z.cn/images'

];

然后修改图片的模型类

namespace app\api\model;

use think\Model;

class Image extends Model

{

// 数据库 url 字段的获取器

public function getUrlAttr($value)

{

// 获取配置信息,进行拼接

if ($data['from'] == 1) {

return config('setting.img_prefix') . $value;

} else {

return $value;

}

}

}

其他表里可能也有 url 字段,所以把 Image 的 getUrlAttr 方法移动到基类中去。方便复用和维护

namespace app\api\model;

use think\Model;

/**

* 所有模型的基类

*/

class BaseModel extends Model

{

public function getUrlAttr($value, $data)

{

if ($data['from'] == 1) {

return config('setting.img_prefix') . $value;

} else {

return $value;

}

}

}

不过有一种情况,其他表里的图片路径字段名不是叫 url,可以把基类的 getUrlAttr 方法名改一下,让他变成一个普通的函数。然后让模型类的获取器去调用这个普通函数即可

模型基类 BaseModel

namespace app\api\model;

use think\Model;

/**

* 所有模型的基类

*/

class BaseModel extends Model

{

public function prefixImgUrl($value, $data)

{

if ($data['from'] == 1) {

return config('setting.img_prefix') . $value;

} else {

return $value;

}

}

}

Image 模型类

namespace app\api\model;

class Image extends BaseModel

{

protected $hidden = [

'id', 'from', 'delete_time', 'update_time'

];

public function getUrlAttr($value, $data)

{

return $this->prefixImgUrl($value, $data);

}

}

总结

步骤

配置自定义配置文件

修改模型类,增加获取器的方法

心得

思路很重要。框架只是一个工具,要利用好工具根据思路来解决问题。

拼接php图片路径,利用ThinkPHP5中的获取器,实现图片URL拼接相关推荐

  1. thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)

    thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...

  2. js获取html中图片路径,用js快速的获取html页面中图片的地址

    这次给大家带来用js快速的获取html页面中图片的地址,用js快速获取html页面中图片的地址的注意事项有哪些,下面就是实战案例,一起来看一下. 这篇文章主要介绍了js获取html代码中图片地址的实现 ...

  3. vue中父组件传图片路径src给子组件无法正常显示图片

    vue父组件传值给子组件是以字符串的形式传值,图片路径无法解析导致无法显示. 父组件: 父组件传值路径: 应该使用require 或:将图片放到public的static里面,使用/static/图片 ...

  4. java pdf添加图片水印图片_Java 在PDF中添加文本水印、图片水印(基于Spire.Cloud.SDK for Java)...

    Spire.Cloud.SDK for Java提供了接口pdfWartermarkApi可用于添加文本水印addTextWartermark()和图片水印addImageWartermark()到P ...

  5. 计算机画图工具怎么缩小图片,Win10如何放大或缩小图片?利用win10画图工具放大、缩小图片教程...

    在日常使用电脑过程中,我们经常会碰到需要放大或缩小照片(图片)的情况.那么,win10系统下该如何扩大或者缩小照片(图片)呢?其实,我们可以通过使用win10系统自带的画图工具来实现.下面小编就向大家 ...

  6. 如何把图片嵌到html中,自给自足,轻松将图片图片内嵌到HTML

    自给自足,轻松将图片图片内嵌到HTML 1.为什么要将图片内嵌到HTML? 针对于这个问题,我们有如下几种答案 1)能减少并发请求,适合且合理的使用,能提高网站的访问速度 2)便于分享,完全可以将需要 ...

  7. jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片

    当前位置:我的异常网» Java Web开发 » 请教JSP中怎么向MySql中存入和取出图片 请教JSP中怎么向MySql中存入和取出图片 www.myexceptions.net  网友分享于:2 ...

  8. JAVA imread_利用Matlab中的imread怎么读取图片

    展开全部 方法/步骤 1.在matlab软件中,读取32313133353236313431303231363533e59b9ee7ad9431333337613137图像数据(载入)利用的是imre ...

  9. java动态拼接请求_在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案...

    在开发网站时候我们会遇到下面问题? - 在引用网页中引用js和css或者动态的Servlet的时候我们是写绝对路径还是相对路径? - 如果写相对路径吧,上线偶尔会报404,还要手动去拼接绝对路径 - ...

最新文章

  1. sql server支持gb18030里面的疑难中文字
  2. CSS Dock Menu:JS+CSS 仿苹果MAC机桌面导航菜单
  3. 知识图谱(二)——知识表示
  4. 个人管理 - 程序员的四个阶段
  5. Android 如何有效的解决内存泄漏的问题
  6. ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)
  7. java 蓝牙指定连接失败_java – Android蓝牙连接 – 服务发现失败
  8. python条件语句代码例子_Python 炫技操作:条件语句的七种写法
  9. 修复VS2010 Beat2的Application cannot start”问题
  10. python调用按键精灵插件_按键精灵教程打码平台接入
  11. 从选课系统看软件开发周期
  12. 办公室计算机打印机共享,办公室共享连接打印机全攻略,办公人必会操作技能...
  13. win10计算机丢失msvcr,Win10计算机丢失MSVCR120.dll怎么解决
  14. 火狐浏览器的css写法,CSS样式IE浏览器跟火狐浏览器兼容写法
  15. linux mame 游戏下载,mame街机模拟器游戏 for linux
  16. 网络号、主机号、子网号--例题
  17. 牛牛的猜球游戏(前缀和+逆交换)
  18. 用Java代码编程实现模拟机器人对话
  19. 如何降低研究生硕士论文的查重率
  20. c#实现文件重命名操作

热门文章

  1. 爆笑三国故事:张飞流水帐11-20
  2. swift编程语言中文版
  3. 直播一对一社交源码交友软件平台搭建解决方案
  4. t3服务器端文件未找到53,用友T3软件客户端已经较长时间未连接加密服务器,超时2880秒,请能出产品重新登录-用友T3...
  5. php把1拆分成三份,谁知道Excel电子表格怎么把一个单元格分3份(分成3个三角)! | excle表格怎么分割三份...
  6. Kubernetes使用vSphere存储 vSphere-CSI
  7. amd笔记本安装matlab,AMD matlab的安装(仅供学习)
  8. Doze中的adb命令大全
  9. Win10 Mobile正式版10586.682更新与修复内容大全
  10. 图像中噪声的总结学习