zolex/vom

多用途对象映射器。使用 PHP 属性将任意数据映射到严格类型的模型。

维护者

详细信息

github.com/zolex/vom

源代码

问题

安装次数: 90,912

依赖者: 0

建议者: 0

安全性: 0

星级: 4

关注者: 2

分支: 1

开放问题: 4

类型:symfony-bundle

0.4.0 2024-09-11 13:50 UTC

README

Release Version Integration Code Coverage License Downloads

VOM

PHP Symfony Laravel

多用途对象映射器(简称 VOM)是一个 PHP 库,通过简单地给模型类添加 PHP 属性,将任何数据结构转换为严格类型的模型。

安装

VOM 可在 Packagist 上找到。要安装,只需通过 Composer 引入即可。

composer require zolex/vom ^0.4

纯 PHP

通过 composer 安装或从发布页面下载,您即可开始使用 不带框架的 VOM

Symfony

当使用 symfony 时,该包也作为扩展集成。使用 flex 和自动配置,无需进行其他操作。您可以使用 VOM Symfony 服务。为了最佳互操作性,VOM 实现了 Symfony 正常化器和反正常化器接口。

无自动配置或选择不运行 symfony/flex 脚本生成,您必须手动将扩展添加到 config/bundles.php 以启用它。

<?php

return [
    // ...
    Zolex\VOM\Symfony\Bundle\ZolexVOMBundle::class => ['all' => true],
    // ...
];

Laravel

VOM 还附带 Laravel 服务提供者。安装后,将 VersatileObjectMapper 类注册为依赖注入,并且可以使用 app()resolve() 等方式访问。有关 Laravel 中的 VOM 的示例,请参阅示例。

快速入门

为了让您对 VOM 的基本功能有一个基本的了解,这里有一个简单的例子。

假设,您的应用程序从某处接收以下扁平数组值。

$data = [
    'firstname' => 'Jane',
    'surname' => 'Doe',
    'street' => 'Samplestreet 123',
    'city' => 'Worsthausen',
    'zip' => '12345',
    'country_name' => 'United Kingdom',
    'email_address' => 'jane.doe@coxautoinc.com',
    'phone' => '0123456789'
];

通常,您会编写一些代码来创建模型实例,设置它们的属性并适当地嵌套它们。在非常简单的场景中,将转换逻辑作为代码编写可能是一个不错的选择,但面对非常大的模型、输入数据结构或应用模型在开发过程中发生变化,或者您想在其他项目中重用转换逻辑时,这可能会变得很痛苦,因为它们接收相同的输入和/或使用相同的模型。

如何使用 VOM 实现

与编写为模型提供数据的业务逻辑不同,您只需使用 PHP 属性配置模型。

use Zolex\VOM\Mapping as VOM;

#[VOM\Model]
class Person
{
    #[VOM\Property]
    public string $firstname;
    
    #[VOM\Property('[surname]')]
    public string $lastname;
    
    #[VOM\Property(accessor: false)]
    public Address $address;
    
    #[VOM\Property(accessor: false)]
    public Contact $contact;
}

#[VOM\Model]
class Address
{
    #[VOM\Property]
    public string $street;
    
    #[VOM\Property('[zip]')]
    public string $zipCode;
    
    #[VOM\Property]
    public string $city;
    
    #[VOM\Property('[country_name]')]
    public string $country; 
}

#[VOM\Model]
class Contact
{
    #[VOM\Property('[email_address]')]
    public string $email;
    
    #[VOM\Property]
    public string $phone;
}

要创建模型实例,只需将数据传递给 denormalize() 方法。

$person = $objectMapper->denormalize($data, Person::class);

您可能已经注意到,某些属性具有参数,而其他属性则没有。有关所有细节,请参阅 完整文档

现在我需要这个吗?

如果您的输入数据和应用程序模型的数据结构之间有任何差异,VOM 可能是一个不错的选择,以避免编写和维护代码,而是只需添加一些 PHP 属性。

注意

如果您需要向实体注入数据,而这些数据已经与您的模型结构匹配,则可以使用此库,但可能有些冗余。在这种情况下,您可以直接利用标准的 Symfony 正常化器

文档

完整的文档可以在本仓库的docs文件夹中找到。点击此处查看文档

示例

快速入门示例以及其他示例可以在VOM Examples 仓库中找到。