DcatAdmin 默认不提供固定表头的功能,可以通过自定义 CSS 来实现
本 CSS 来自 DcatAdmin 项目中另一个地方的样式。
将代码直接贴在需要固定表头的 Grid 即可。
1 | Admin::style(<<<STYLE |
其中 top 是我手动计算的,可能要根据实际高度自行修改。或者有自适应的方法也欢迎提供。
效果如题所示:

DcatAdmin 默认不提供固定表头的功能,可以通过自定义 CSS 来实现
本 CSS 来自 DcatAdmin 项目中另一个地方的样式。
将代码直接贴在需要固定表头的 Grid 即可。
1 | Admin::style(<<<STYLE |
其中 top 是我手动计算的,可能要根据实际高度自行修改。或者有自适应的方法也欢迎提供。
效果如题所示:

VMware 克隆后,不会给机器分配新的IP,造成多个机器共用处理的IP。需要手动配置IP:
系统版本 : Ubuntu 20.4
编辑网络配置信息:
1 | cd /etc/netplan |
需要注意的是,配置文件名并不一定是一样的,需要替换成自己的。
编辑以下内容:
1 | # This is the network config written by 'subiquity' |
我的虚拟机用的是 NAT 模式,以上内容可以根据自己的配置替换。详细信息在 “导航栏->编辑->虚拟网络编辑器”
重启生效:
1 | sudo netplan apply |
Laravel 中,更新一个资源应该使用 PUT 方法。但是在实现中, FORM 表单只支持 POST,GET 方法,在其中添加 _method 字段让 Laravel 将请求当作 PUT,DELETE等字段。
今天正常运行的系统突然无法更新数据,HTTP STATUS 405 提示信息为:
1 | The POST method is not supported for this route. Supported methods: GET,HEAD,PUT,PATCH,DELETE. |
由于这个错误提示的误导,我一直以为是路由出了问题,往这方面排查了挺长时间。
最终通过查看站点日志,发现 PHP 报错了:
1 | FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. in Unknown on line 0" while reading response header from upstream |
到此问题就很清楚了,报错的表单中有很多 checkbox 导致处于表单末尾的 _method 因为默认最大提交限制为 1000 的问题无法被系统接收到,从而导致系统无法根据 _method 项来用 PUT 方式处理 POST 请求。
处理方法也很简单,在 php.ini 中修改 max_input_vars 的值即可。记得要去掉配置项前面的 ; 符号,不然不会生效(我第一次更改后还是报错,以为不是这里的问题,检查后才发现值虽然改了,但是默认是注释状态)。
PHP8 - Named arguments 与 Constructor property promotion
PHP8 已于 2020-11-26 发布,这次带来了我们期待已久的 JIT 。但这篇文章主要讲讲新特性的理解与使用。
我们会在函数参数列表中使用默认值:
1 | function setUser(int $age, string $name, string $money = "0.00", int $sex = 0, $job = null) |
以前当我们想要使用 $money 的默认值并设置 $sex 的值时:
1 | setUser(12,"Lilin", "0.00", 1); |
$money 的值被我们显式的设置了,似乎使函数声明中的默认值“浪费了”
在 PHP8 中,我们可以根据参数名来设置参数的值:
1 | setUser(12,name:"Lilin", sex:1); |
我们可以通过指定参数名来设置对应的参数值,这么做的好处不仅仅可以使我们更方便的使用预设的默认值.代码不是一成不变的,在某一天我们需要维护上个月的代码,如果我遇到了这样的函数调用:
1 | getUserWith($userId, true, 5, 100, today(), true) |
CodeIgniter4 日期自动更新 useTimestamps
在 CodeIgniter4 中,如果想要 Model 在创建及更新数据时自动更新对应的日期字段,可以使用 useTimestamps。但是有很多人会遇到遇到一些问题,其中最主要的问题是数据库字段与数据内容不匹配导致的。我们在设置了 $useTimestamps = true 后,往往忽略了与之配套使用的字段 dateFormat。
一般的,我们在数据库中存储时间使用时间戳,我一般设置为 int UNSIGNED。大多人也是如此,在 CI4 中 dateFormat 的默认值为 datetime
1 | case datetime: |
默认的日期格式为 2020-05-09 12:12:12 如果我们的数据会为 int 则数据会存储被为 2020 ,后边的信息无法存储。
所以我们需要将日期格式设置为 $dateFormat = int
CodeIgniter4 useSoftDeletes 软删除
做数据删除的时候,我们往往会用到软删除。CI4对这一功能进行了支持。
CI4 使用 deleted_at 字段是否为 NULL 来判断是数据是否被删除。
1 | namespace App\Models; |
如果 useSoftDeletes 设置为 true, 则所有数据结果默认排除掉已经删除的数据,具体的做法是会在 SQL 语句中增加 deleted_at IS NULL 来进行数据的过滤。
有很多人在 GITHUB 发 ISSUES 表示自己的 useSoftDeletes 无法正常工作,实际上是因为我们默认习惯将 deleted_at 默认设置为 int, DEFAILT 0, NOT NULL。我们需要让 deleted_at 允许 NULL 并且默认为 NULL 。这样我们才能使用 useSoftDelets
如果我们希望返回的数据临时包括已删除的数据, 我们可以使用 withDeleted
如果我们希望返回的数据只包括已删除的数据,我们可以使用 onlyDeleted
当使用前后端分离,并且前端后端域名不统一时,我遇到了跨域的问题
1 | Access to XMLHttpRequest at http://localhost/api/login from origin http://localhost:8010 has been blocked by CORS policy: Response to preflight request doesnt pass access control check: NoAccess-Control-Allow-Origin header is present on the requested resource.``` |
1 | Access to XMLHttpRequest at http://localhost/api/login from origin http://localhost:8010 has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response. |
我们只需要在返回的 response 中添加 header就可以了
首先我们创建一个 Filter 用来批量在生成的 response 中添加 headers
1 | App\Filters\Api.php |
接下来我们将注册并配置 App\Filters\Api::class, 编辑配置文件 App\Config\Filters.php
1 | ... |
配置该 filter 对哪些 uri 生效
public $filters = [
api => [
after =>[
api/*,
]
]
];
至此,在每个路径为 api/* 的请求返回前,就会执行 after 中的代码,添加 headers
02-线性结构2 一元多项式的乘法与加法运算
设计函数分别求两个一元多项式的乘积与和。
输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。
输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出 0 0。
1 | 4 3 4 -5 2 6 1 -2 0 |
1 | 15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1 |
公司的主控的Redis是之前别人搭的,用root:root启动并且监听了公网IP,没有加密码。被黑客扫描到并利用漏洞删除了服务器中的数据文件,涉及数据库代码文件等。
登陆服务器后发现文件都被删除了,df -h 发现磁盘占用并没有减少。结合之前清除nginx日志的经历,应该是MySQL服务还在运行中,所以文件没有立即释放。
经过与TG群里的大佬沟通学习,最后通过 losf 查看到了已删除但未被释放的文件,再通过 proc 内的文件句柄 用 cp 命令拷贝到原目录。经过数小时的拷贝,数据库数据总算恢复了。幸好给代码做了git仓库,不然代码要回滚好几个版本。之后迁移到新的服务器。
rm -rf 命令1 | >ERROR: Failed to download Chromium r588429! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download. |