Yii-DetailView的使用

Yii-DetailView的使用

在Yii框架中,如果你想要在DetailView中显示一个图片,你可以通过自定义属性的方式来实现。这里假设你正在使用 Yii 2.x 版本。

首先,你需要确保你的模型中有对应的字段存储图片路径。然后,在DetailView配置中使用attribute选项来自定义如何显示这个图片字段。

下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use yii\widgets\DetailView;

// 假设 $model 是你的模型实例,并且它有一个名为 'image_path' 的属性,该属性包含图片的路径。

echo DetailView::widget([
'model' => $model,
'attributes' => [
// ... 其他属性 ...
[
'label' => 'Image',
'format' => 'raw', // 这是关键,告诉 Yii 这个属性应该作为原始 HTML 输出
'value' => function ($model) {
return Html::img($model->image_path, ['width' => '100px']); // 返回 img 标签
},
],
// ... 其他属性 ...
],
]);

这段代码会创建一个DetailView,其中包含一个名为 “Image” 的列,并显示模型中的image_path字段所指向的图片。

注意format设置为raw,这表明输出的内容是HTML代码而不是普通文本。

Html::img()函数用于生成标签,并可以指定宽度等属性。

如果你需要更复杂的定制,比如添加额外的类或者处理图片不存在的情况,你可以在value回调函数中加入更多的逻辑。

Mysql之BigInt类型数据计算溢出问题

问题描述

在名为 act_sign_up 的报名表中,

存在四个字段用于记录不同性别的报名人数及其退款人数:man_number、refund_man_number、girl_number 和 refund_girl_number。

这些字段的数据类型为 BIGINT UNSIGNED,用来存储对应的人数。

当尝试计算净报名人数(即实际报名人数减去退款人数)时,使用了如下公式:

1
man_number - refund_man_number + girl_number - refund_girl_number

然而,在执行涉及上述公式的子查询并使用 SUM() 函数时,
遇到了数据截断错误,提示 BIGINT UNSIGNED value is out of range in,这表明发生了数据类型的溢出。

问题分析

为什么会出现计算溢出呢?

更改查询语句, 将这四个字段拆出来, 我发现, 出现溢出的数据, 包含有NULL值

那为什么有NULL值计算会出现溢出?

关于NULL的算术运算

在 MySQL 中,当涉及到 NULL 的算术运算时,遵循以下规则:

  • 任何与 NULL 相加、相减、相乘或相除的操作都将返回 NULL。这是因为 NULL 表示未知值,所以无法确定任何操作的确切结果。
  • 隐式转换:MySQL 不会将 NULL 隐式转换为数字或其他类型;相反,它会在遇到 NULL 时直接停止进一步的计算,并返回 NULL 作为结果。

解决方案

使用 COALESCE 函数进行计算

通过使用 COALESCE,我们可以保证每个参与计算的字段都有一个确定的数值,而不是 NULL。例如:

1
COALESCE(man_number, 0) - COALESCE(refund_man_number, 0) + COALESCE(girl_number, 0) - COALESCE(refund_girl_number, 0)

这样做有几个好处:

  • 避免 NULL 值带来的不确定结果:如果没有使用 COALESCE,那么任何包含 NULL 的算术运算都会导致整个表达式的结果为 NULL。
  • 防止溢出:确保即使是空记录也能正确地被计算为零,而非产生未定义行为或错误。
  • 提高查询稳定性:使得查询在面对不完整的数据集时更加健壮,不会因为意外情况而失败。

为了避免这种问题,建议总是使用 COALESCE 或类似的函数来确保所有参与算术运算的字段都有明确的数值。

此外,考虑优化数据库设计,确保数据完整性,比如设置适当的默认值,或者使用触发器和约束来控制数据输入,减少出现 NULL 值的可能性。

StarUML6.1破解教程

本教程仅限学习交流使用

简介

StarUML 是一款流行的建模工具,
支持多种系统建模语言(如UML、SysML等),
它为软件开发者提供了直观的图形界面来设计和文档化软件架构。

最近下回了最新版的StarUML(6.1),使用老版本的破解方法发现虽然能够正常画图但无法导出图片了,

毕竟这玩意儿看起来是基于Web的,就开了一下调试工具发现他在导出的时候获取了激活信息的Object,

由于这个Object他是null,访问成员会导致错误,因此导致图片无法导出。直接上步骤。

步骤

  1. 安装Node.js与npm
    到Node.js官网 https://nodejs.org/en/download/current 下载并安装Node.js,具体可以自己找教程

  2. 安装asar
    打开cmd或者powershell(当然如果是Linux的话就是可爱的bash/zsh啥的咯),输入命令 npm i -g asar

  3. 找到对应的资源文件并解压
    来到你StarUML的安装目录,默认为C:\Program Files\StarUML\resources,找到app.asar,如下图。

我们找一个顺眼的目录,将其复制到对应的目录下,并打开cmd或powershell将工作目录切过去,执行asar e app.asar app。

我们就得到了一个app文件夹,打开我们的惯用IDE,开始patch咯。

  1. Patch对应的文件
    还是老样子要patch的文件为license-manager.js,我们找到app/src/engine/license-manager.js。

打开这个文件,我们找到LicenseManager这个类的checkLicenseValidity方法,内容直接改成setStatus(this, true);,如下图。

然后我们还需要额外做一个工作,也是解决6.1版本无法导出图片的罪魁祸首。

我们再看到getLicenseInfo这个方法,内容如下图。

licenseType写PRO,其他地方随便写应该没问题。

然后我们再定位到app/src/app-context.js,找到AppContext

的appReady方法,注释掉这一行来禁用启动后的更新检查(其实在设置里禁用也没差我感觉)。

  1. 重新打包,将文件丢回去
    还是那个执行解包的工作目录,再执行asar p app app.asar,然后将新的app.asar丢回去就好了。

效果如下图,我们也能正常导出图片了。

七牛云图片压缩

当前情况

场景是商家账号, 对商家上传的图片进行压缩 (身份证正面, 反面,营业执照)
期望将已有的图片压缩为200KB

接入的是七牛云, 七牛提供了数据处理, 因此打算考虑七牛云或PHP等其他方案

  1. PHP压缩, 采用Imagick进行Heic压缩, 然后在转回png格式, 上传到七牛云进行存储; 频繁转换; 转换图片质量有损(可能,需验证); 需要Imagick拓展
  2. 普通压缩-格式转换
  3. 普通压缩-降低quality
  4. 普通压缩-改分辨率
  5. imageslim 0.1 元/千次,按月计量,按月结算 不足千次不收费
  6. HEIC 压缩率90%+ 800 x 600 以下 0.025元/千次
  7. AVIF 压缩率90%+ 800 x 600 以下 0.075 元/千次