编程

[Laravel 扩展包] PHP 中使用 Transformer 包清洁及格式化数据

1498 2022-11-02 19:33:21

Transformer 是一个用于清洁和格式化数据的包,由 Laravel 的验证组件驱动。这个包使用类似于 Laravel 验证规则的语法,通过调用 callable 函数、类等完成转换数据:

use Closure;
 
// example available functions at runtime:
function to_carbon($value)
{
    return new Carbon\Carbon($value);
}
 
function only_numbers($value)
{
    return preg_replace("/[^0-9]/",'',$value);
}
 
$input = [
  'first_name' => '    jim    ',
  'last_name' => '   thompson',
  'phone_number' => '123-456-7890',
  'date_of_birth' => "1991-05-01",
];
 
(new DataTransformer($input, [
    'first_name' => 'trim|ucfirst',
    'last_name' => 'trim|ucfirst',
    'phone_number' => 'only_numbers',
    'date_of_birth' => 'to_carbon|->format:m/d/y',
]))->transform();
 
// Returns:
// [
//     "first_name" => "Jim",
//     "last_name" => "Thompson",
//     "phone_number" => "1234567890",
//     "date_of_birth" => "05/01/91",
// ]

熟悉 Laravel 验证 API 的朋友,会发现基于字符串的 transformer 规则。

同时,如代码片段显示,这个包也使用了 chainable 语法(to_carbon|->format:m/d/y), 可以在数据后链接额外的调用。

你也可以使用闭包或者实现 Transformable 接口的类来转换数据。 另外,这个包支持使用点注释,通配符输入()等来表示嵌套数组。

更多详情,查看 Github 上的源码