柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

Dcat Admin 教程 - 如何优雅地更改表单值的数据类型?

2021-01-07 admin laravel  1976

在日常使用中,我们经常会遇到需要更改用户输入的表单值的数据类型的情况。

例如数据表中有一个 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();


现在代码就简洁很多啦。

但是这个通过 macro 扩展出来的方法,还有那么一点点的不足,我们的编辑器没办法识别这个方法,没有自动补全提示。所以下面我们可以通过一个小技巧,让你的编辑器能识别这个通过 macro 扩展出来的方法。

在你的项目根目录中新建一个文件.ide_helper.php,然后打开并写入以下内容:

namespace Dcat\Admin\Form
{
    /**
     * @method $this saveAsString()
     */
    class Field
    {}
}


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

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

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!