Laravel 扩展 - Seeder 填充数据生成

Laravel 框架支持 db:seed 来填充表。相对应的,需要自己编写 DatabaseSeeder.php 文件。 如果填充文件行数少,或者可以利用工厂类生成会很方便。
但是有些数据是需要手动填写与组合的。例如:目录的组织,权限的组织,通用配置的组织。数据大,改动多,不易组织。

nuyfeng/make-database 可以直接通过数据库来生成 Seeder 文件,省去的繁琐的复制。

GITHUB: make-database

1
2
3
4
5
6
7
8
9
10
11
12
13
composer require --dev nuyfeng/make-database   //安装扩展

php artisan database:build-seeder --help

Description:
根据数据库生成 seeder 数据

Usage:
database:build-seeder [options]

Options:
--max-rows[=MAX-ROWS] 表允许最大的行数,超过此值跳过生成. 0为不限制 [default: "100"]
--tables[=TABLES] 指定生成数据表表列表 example users,sites,logs

DcatAdmin 表头固定

DcatAdmin 默认不提供固定表头的功能,可以通过自定义 CSS 来实现
本 CSS 来自 DcatAdmin 项目中另一个地方的样式。

将代码直接贴在需要固定表头的 Grid 即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Admin::style(<<<STYLE
thead tr:nth-child(1) th {
background-color: #fff;
position: sticky;
top: 60px; // 顶部 Banner
z-index: 10;
}
thead tr:nth-child(2) th {
background-color: #fff;
border-bottom: 0;
position: sticky;
top: 101px; //手动计算的
z-index: 10;
}
STYLE
);

其中 top 是我手动计算的,可能要根据实际高度自行修改。或者有自适应的方法也欢迎提供。
效果如题所示:

Snipaste_2022-03-31_14-22-34.png

Laravel POST 参数过多引发的 405错误

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 的值即可。记得要去掉配置项前面的 ; 符号,不然不会生效(我第一次更改后还是报错,以为不是这里的问题,检查后才发现值虽然改了,但是默认是注释状态)。