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;
});

...

简洁之道

那么有没有方法可以让你的代码变得更简洁呢?答案当然是有的,并且非常简单,我们可以利用Laravelmacro功能来扩展这个功能。

打开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
    {}
}

然后你的编辑器就能识别这个方法了,是不是非常简单。

结语

Laravelmacro是一个非常强大的功能,Dcat Admin内置的许多功能都支持了macro操作,大家可以自行发掘出更多姿势技巧。

Dcat Admin

Dcat Admin是一个基于laravel-admin二次开发而成的后台系统构建工具,只需很少的代码即可快速构建出一个功能完善的高颜值后台系统。内置丰富的后台常用组件,开箱即用,让开发者告别冗杂的HTML代码,对后端开发者非常友好。

在线演示站点 | LearnKu官方文档 | Github主页(如果喜欢这个项目不妨点个star,感谢支持!)

本作品采用《CC 协议》,转载必须注明作者和本文链接
Jiangqh
本帖由系统于 10个月前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4
TigerLin

感谢分享,dcat-admin真的很好用,感谢辛苦付出,支持

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!