Dcat Admin 教程 - 如何优雅地更改表单值的数据类型?
场景#
在日常使用中,我们经常会遇到需要更改用户输入的表单值的数据类型的情况。
例如数据表中有一个 title
字段并声明为 not null
,那么我们则需要保证该字段的值保存到数据库时的数据类型不能是 null
,否则数据库会报错。在 Dcat Admin 中,我们通常可以使用以下方法转换表单值的数据类型
$form->text('title')->saving(function ($value) {
// 强制转化为string类型
return (string) $value;
});
这种用法是没有问题的,但是当类似 title
这样需要转换类型的字段非常多的时候,我们的代码会变得杂乱,如
$form->text('title')->saving(function ($value) {
return (string) $value;
});
$form->text('first_name')->saving(function ($value) {
return (string) $value;
});
$form->text('last_name')->saving(function ($value) {
return (string) $value;
});
...
简洁之道#
那么有没有方法可以让你的代码变得更简洁呢?答案当然是有的,并且非常简单,我们可以利用 Laravel
的 macro
功能来扩展这个功能。
打开 app/Admin/bootstrap.php
,写入以下代码
// 扩展表单字段方法
// 保存为字符串
Form\Field::macro('saveAsString', function () {
return $this->saving(function ($v) {
return (string) $v;
});
});
然后就可以在你的 form
表单中这么使用了
$form->text('title')->saveAsString();
$form->text('first_name')->saveAsString();
$form->text('last_name')->saveAsString();
现在代码就简洁很多啦。
IDE 自动补全#
但是这个通过 macro
扩展出来的方法,还有那么一点点的不足,我们的编辑器没办法识别这个方法,没有自动补全提示。所以下面我们可以通过一个小技巧,让你的编辑器能识别这个通过 macro
扩展出来的方法。
在你的项目根目录中新建一个文件.ide_helper.php
,然后打开并写入以下内容
<?php
namespace Dcat\Admin\Form
{
/**
* @method $this saveAsString()
*/
class Field
{}
}
然后你的编辑器就能识别这个方法了,是不是非常简单。
结语#
Laravel
的 macro
是一个非常强大的功能,Dcat Admin 内置的许多功能都支持了 macro
操作,大家可以自行发掘出更多姿势技巧。
Dcat Admin#
Dcat Admin 是一个基于 laravel-admin 二次开发而成的后台系统构建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的 HTML 代码,对后端开发者非常友好。
在线演示站点 | LearnKu 官方文档 | Github 主页 (如果喜欢这个项目不妨点个 star,感谢支持!)
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: