拼接php图片路径,利用ThinkPHP5中的获取器,实现图片URL拼接
图片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拼接相关推荐
- thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)
thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...
- js获取html中图片路径,用js快速的获取html页面中图片的地址
这次给大家带来用js快速的获取html页面中图片的地址,用js快速获取html页面中图片的地址的注意事项有哪些,下面就是实战案例,一起来看一下. 这篇文章主要介绍了js获取html代码中图片地址的实现 ...
- vue中父组件传图片路径src给子组件无法正常显示图片
vue父组件传值给子组件是以字符串的形式传值,图片路径无法解析导致无法显示. 父组件: 父组件传值路径: 应该使用require 或:将图片放到public的static里面,使用/static/图片 ...
- java pdf添加图片水印图片_Java 在PDF中添加文本水印、图片水印(基于Spire.Cloud.SDK for Java)...
Spire.Cloud.SDK for Java提供了接口pdfWartermarkApi可用于添加文本水印addTextWartermark()和图片水印addImageWartermark()到P ...
- 计算机画图工具怎么缩小图片,Win10如何放大或缩小图片?利用win10画图工具放大、缩小图片教程...
在日常使用电脑过程中,我们经常会碰到需要放大或缩小照片(图片)的情况.那么,win10系统下该如何扩大或者缩小照片(图片)呢?其实,我们可以通过使用win10系统自带的画图工具来实现.下面小编就向大家 ...
- 如何把图片嵌到html中,自给自足,轻松将图片图片内嵌到HTML
自给自足,轻松将图片图片内嵌到HTML 1.为什么要将图片内嵌到HTML? 针对于这个问题,我们有如下几种答案 1)能减少并发请求,适合且合理的使用,能提高网站的访问速度 2)便于分享,完全可以将需要 ...
- jsp mysql 图片路径,请教JSP中怎么向MySql中存入和取出图片
当前位置:我的异常网» Java Web开发 » 请教JSP中怎么向MySql中存入和取出图片 请教JSP中怎么向MySql中存入和取出图片 www.myexceptions.net 网友分享于:2 ...
- JAVA imread_利用Matlab中的imread怎么读取图片
展开全部 方法/步骤 1.在matlab软件中,读取32313133353236313431303231363533e59b9ee7ad9431333337613137图像数据(载入)利用的是imre ...
- java动态拼接请求_在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案...
在开发网站时候我们会遇到下面问题? - 在引用网页中引用js和css或者动态的Servlet的时候我们是写绝对路径还是相对路径? - 如果写相对路径吧,上线偶尔会报404,还要手动去拼接绝对路径 - ...
最新文章
- sql server支持gb18030里面的疑难中文字
- CSS Dock Menu:JS+CSS 仿苹果MAC机桌面导航菜单
- 知识图谱(二)——知识表示
- 个人管理 - 程序员的四个阶段
- Android 如何有效的解决内存泄漏的问题
- ReviewForJob——快速排序(基于插入排序)+快速选择(快速排序变体)
- java 蓝牙指定连接失败_java – Android蓝牙连接 – 服务发现失败
- python条件语句代码例子_Python 炫技操作:条件语句的七种写法
- 修复VS2010 Beat2的Application cannot start”问题
- python调用按键精灵插件_按键精灵教程打码平台接入
- 从选课系统看软件开发周期
- 办公室计算机打印机共享,办公室共享连接打印机全攻略,办公人必会操作技能...
- win10计算机丢失msvcr,Win10计算机丢失MSVCR120.dll怎么解决
- 火狐浏览器的css写法,CSS样式IE浏览器跟火狐浏览器兼容写法
- linux mame 游戏下载,mame街机模拟器游戏 for linux
- 网络号、主机号、子网号--例题
- 牛牛的猜球游戏(前缀和+逆交换)
- 用Java代码编程实现模拟机器人对话
- 如何降低研究生硕士论文的查重率
- c#实现文件重命名操作
热门文章
- 爆笑三国故事:张飞流水帐11-20
- swift编程语言中文版
- 直播一对一社交源码交友软件平台搭建解决方案
- t3服务器端文件未找到53,用友T3软件客户端已经较长时间未连接加密服务器,超时2880秒,请能出产品重新登录-用友T3...
- php把1拆分成三份,谁知道Excel电子表格怎么把一个单元格分3份(分成3个三角)! | excle表格怎么分割三份...
- Kubernetes使用vSphere存储 vSphere-CSI
- amd笔记本安装matlab,AMD matlab的安装(仅供学习)
- Doze中的adb命令大全
- Win10 Mobile正式版10586.682更新与修复内容大全
- 图像中噪声的总结学习