rips/connector-bundle

RIPS API Connector bundle for Symfony

安装次数: 3,154

依赖项: 0

建议者: 0

安全性: 0

星标: 4

关注者: 5

分支: 1

开放问题: 2

类型:symfony-bundle

3.4.0 2020-02-14 09:16 UTC

README

这是一个围绕 RIPS Connector package 的 Symfony bundle 包装器。这个库提供了访问 RIPS 和其所有功能的简单方式。

安装

使用 composer 包含该包

composer require rips/connector-bundle:~3.4

或者将以下内容添加到 composer.json 中并运行 composer update

"rips/connector-bundle": "~3.4"

此库旨在用于 Symfony 应用程序,但也可以单独使用。如果与 Symfony 一起使用,连接器包的安装应自动在 bundles.php 文件中创建一个条目,如下所示

return [
    // ...
    RIPS\ConnectorBundle\RIPSConnectorBundle::class => ['all' => true],	
    // ...
];

此外,您还需要在 app/config/rips_connector.yaml 中添加配置设置(有关配置选项列表,请参阅 rips/connector 读取说明)。如果您不使用 Symfony,可以通过 APIService 构造函数指定选项。

rips_connector:
    base_uri: 'https://:8080'
    email: 'email'
    password: 'password'

用法

一个基本的示例,用于获取所有用户的列表的命令行应用程序,不使用 Symfony,如下所示

<?php

include 'vendor/autoload.php';

use RIPS\ConnectorBundle\Services\APIService;
use RIPS\ConnectorBundle\Services\UserService;

// Create an API service object that gets passed to all other services
$apiService = new APIService(
    'username',
    'password',
    [
        "base_uri" => 'https://:8080'
    ]
);

$userService = new UserService($apiService);

// Get all users
$users = $userService->getAll()->getUsers();

foreach ($users as $user) {
    echo $user->getEmail() . "\n";
}

该包可以轻松集成到像这样的 Symfony 应用程序中

<?php

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use RIPS\ConnectorBundle\Services\UserService;
use RIPS\ConnectorBundle\InputBuilders\UserBuilder;
use RIPS\Connector\Exceptions\ClientException;
use RIPS\Connector\Exceptions\ServerExecption;

class DefaultController extends Controller
{
    /** @var UserService */
    protected $userService;
    
    public function __construct(UserService $userService)
    {
        $this->userService = $userService;
    }
    
    public function indexAction()
    {
        try {
            // Get all users
            $users = $this->userService->getAll()->getUsers();

            // Add a new user
            $response = $this->userService->create(
                new UserBuilder([
                	'email'         => 'test@ripstech.com',
                	'plainPassword' => '***********'
                ])
            )->getResponse();
        } catch (ClientException $e) {
            // 4** error
        } catch (ServerException $e) {
            // 5** error
        }
        
        return $this->render('default/index.html.twig', ['users' => $users]);
    }
}

架构

本节包含该包使用的架构概述。

服务

服务是围绕 RIPS-Connector 库的主要包装器。在 APIService 中初始化 RIPS\Connector\API 类,所有其他服务都期望注入 APIService(请参阅 services.yml)。

每个服务类都应该在 RIPS-Connector 中有一个相应的 Requests 类。为每个 Requests 类在 APIService 类中添加了一个访问器方法,以便更容易访问。

目录结构试图遵循 API 控制器的目录结构。

实体

API 返回的数据不是返回 stdClass 对象或数组,而是映射到自定义 Entity 类,这些类由响应类返回。由服务类返回响应。

实体只是具有所有属性获取器/设置器的自定义类。在某些情况下,它们将具有嵌套实体。例如:`UserEntity` 将有一个嵌套的 `OrgEntity`,因为用户属于一个组织。强烈建议在访问它们之前检查是否存在子对象。

填充器

在 connector-bundle 中的填充器用于使用从 RIPS Connector 库返回的数据填充自定义 Entity 类。它们期望 stdClass 对象(来自 RIPS Connector)映射到实体类。

在某些情况下,您将具有嵌套对象(例如,`UserEntity` 包含嵌套的 `OrgEntity`),在这种情况下,最好在 `UserHydrator` 中重用 `OrgHydrator` 以填充嵌套的 `OrgEntity` 对象。

输入构建器

记住一个请求可能具有的所有预期输入参数可能很困难。为此,创建了具有所有预期参数作为属性以及获取器/设置器的 InputBuilder 类。还可以将数据数组传递给构造函数,这将填充相应的字段。