bridit/values

替代实体对象。构建模型、API 客户端等的高效方法

维护者

详细信息

github.com/bridit/values

源代码

0.6.1 2021-05-17 20:39 UTC

This package is auto-updated.

Last update: 2024-09-18 04:16:09 UTC


README

formapro\values 是一个 MIT 许可的开源项目,其持续开发完全得益于社区和我们的客户的支持。如果您想加入他们,请考虑

Build Status

您的“替代自我”对象

这种方法试图从数组和对象世界中汲取最好的。因此,使用这个库,您可以像平时一样处理对象,但内部一切都是存储在数组中。数组很容易从对象中提取或设置。

可用于

一个对象 为我们提供了一个容易依赖的合同。我们可以为类添加类型提示,对其方法使用自动完成。这是一件好事,但是填充对象或获取其当前状态既不容易也不便宜。我们提供了各种工具,如序列化程序、转换器等。当我们必须处理对象树时,事情变得更糟。

另一方面,一个数组 容易存储或发送。每当您调用 API 或对数据库进行查询时,您都会遇到一个数组。这是它的优势,但它不提供任何合同,当数组结构改变时,代码很容易被破坏。

示例

获取存储库信息示例

让我们使用 Github API 并获取有关 Symfony 存储库的信息。这里是 实际响应,我们将使用简化的版本。

<?php
namespace Acme;

use Formapro\Values\ValuesTrait;
use Formapro\Values\ObjectsTrait;
use function Formapro\Values\set_values;

class Repo
{
    use ValuesTrait;
    use ObjectsTrait;

    public function getStargazersCount()
    {
        return $this->getValue('stargazers_count');
    }

    /** @return Owner */
    public function getOwner()
    {
        return $this->getObject('owner', Owner::class);
    }
}

class Owner
{
    use ValuesTrait;

    public function getId()
    {
        return $this->getValue('id');
    }

    public function getLogin()
    {
        return $this->getValue('login');
    }
}

$data = json_decode('
{
  "id":458058,
  "name":"symfony",
  "full_name":"symfony/symfony",
  "owner":{
    "login":"symfony",
    "id":143937,
  },
  "stargazers_count":13945,
}
', true);

$repo = new Repo();
set_values($repo, $data);

$repo->getStargazersCount(); // 13945
$repo->getOwner()->getLogin(); // symfony

创建新 gist

现在,让我们创建一个新的 gist。根据 Github API,我们必须发送一个包含文件集合的对象。让我们创建 Gist 和 GistFile 对象。用数据填充它们并获取数组。

<?php
namespace  Acme;

use Formapro\Values\ObjectsTrait;
use Formapro\Values\ValuesTrait;

class Gist
{
    use ValuesTrait;
    use ObjectsTrait;

    public function setDescription($description)
    {
        $this->setValue('description', $description);
    }

    public function setPublic($bool)
    {
        $this->setValue('public', $bool);
    }

    public function addFile($fileName, GistFile $file)
    {
        $this->addObject('files', $file, $fileName);
    }
}

class GistFile
{
    use ValuesTrait;

    public function __construct($content)
    {
        $this->setValue('content', $content);
    }
}

$file = new GistFile('String file contents');

$gist = new Gist();
$gist->setDescription('the description for this gist');
$gist->setPublic(true);
$gist->addFile('file1.txt', $file);

get_values($gist);

/*
[
    'description' => 'the description for this gist',
    'public' => true,
    'files' => [
        'file1.txt' => [
            'content' => 'String file contents',
        ]
    ]
]
 */

// now you can send it to api. 

由 Forma-Pro 开发

Forma-Pro 是一家全栈开发公司,其兴趣也扩展到开源开发。作为一支强大的专业团队,我们有一个目标和能力,通过开发最前沿的解决方案来帮助社区,这些解决方案在电子商务、docker 和面向微服务的架构领域积累了多年的经验。我们的主要专业领域是基于 Symfony 框架的解决方案,但我们始终寻找能够以最佳方式完成我们工作的技术。我们致力于创建革命性的解决方案,改变我们在架构和可扩展性方面的开发方式。

如果您对我们的开源开发有任何问题或疑问,特别是关于这个产品或任何其他事项,请随时联系 opensource@forma-pro.com

许可

它是在 MIT 许可 下发布的。