ttbooking/data-mapper 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

ttbooking/data-mapper

最新稳定版本:0.1.0

Composer 安装命令:

composer require ttbooking/data-mapper

包简介

map data into typed objects

README 文档

README

  • Заполнение объектов из данных (array, stdClass, или объекты с toArray методом).
  • Работает на аттрибутах.
  • Кастинг простых типов.
  • Возможность использовать преобразователи для сложных типов.
  • Несколько типов на свойство.

Сценарий использования

<?php
use DataMapper\Elements\DataMapper;
/**
 * Описание структуры объекта
 */
class Example extends DataMapper {
    public string $property;
}

...

/**
 * Использование
 */
$item = Example::map(['property' => 'value']);
echo $item->property; // value

/**
 * Массив данных
 */
$items = Example::mapMany([
    ['property' => 'value'],
    ['property' => 'value2']
]);

Встроенные аттрибуты

ManyOf

Нужен когда каждый из элементов массива должен быть приведен к типу. Принимает простые типы, либо Mappable По сути выполняет роль Caster, для удобства вынесен в атрибут

use DataMapper\Attributes\ManyOf;
class Example extends DataMapper {
    #[ManyOf('int')]
    public array $values;
}
$item = Example::map(['values' => ['1', 3, '5', '0']]);
/**
 * $item->values = [1, 3, 5, 0];
 */

В случае когда в качестве типа указан класс реализующий Mappable, управление заполнения передается ему.

FromName & ToName

Позволяет задать имя свойства при заполнении, а так же имя свойства при сериализации в массив

use DataMapper\Attributes\FromName;
use DataMapper\Attributes\ManyOf;
use DataMapper\Attributes\ToName;

class Example extends DataMapper {
    #[ManyOf('int'), FromName('integers'), ToName('integerValues')]
    public array $values;
}
$item = Example::map(['integers' => ['1', 3, '5', '0']]);
/**
 * $item->values === [1, 3, 5, 0];
 * $item->toArray() === ['integerValues' => [1, 3, 5, 0]]
 */

IgnoresSerialization

Позволяет исключить свойство при сериализации из результирующего массива В примере не нуждается

Caster

Аттрибут принимает значение имя класса реализующего InputCaster или OutputCaster

DateTimeCaster

2 параметра

use DataMapper\Attributes\Caster;
use DataMapper\Casters\DateTimeCaster;

class Example extends DataMapper {
    //              формат входящей даты, формат сериализации, часовой пояс
    #[Caster(DateTimeCaster::class, 'Y-m-d', 'd.m.Y', 'Europe/Kaliningrad')]
    public Carbon $date;
}

$example = Example::map([
    'date' => '20.11.2020'
]);

$example->toJson(); // {"date": "2020-11-20"}

Несколько типов (Union types)

Приоритет отдается первому типу из установленных, однако при заполнении из объекта берется тип соответствующий переданному объекту

Создавать аттрибуты вряд ли понадобится, однако такая возможность имеется Создание преобразователей (Caster) производится реализацией соответствующих интерфейсов

InputCaster нужен для преобразования данных в момент заполнения

OutputCaster нужен при преобразовании данных в момент сериализации

Планы на будущее

  • Добавить передачу InputCaster в качестве параметра ManyOf или подобного рода действия, позволяющие применять преобразование к каждому элементу

统计信息

  • 总下载量: 161
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 3
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-03-17

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固