laminas-api-tools/statuslib-example

用于与 Laminas API Tools 文档示例一起使用的库

1.3.0 2021-06-03 14:04 UTC

This package is auto-updated.

Last update: 2024-09-08 20:34:04 UTC


README

Build Status

🇷🇺 俄罗斯公民

我们,Laminas 的参与者,来自不同的国家。我们中有许多人在俄罗斯和乌克兰都有朋友、亲戚和同事。有些人出生在俄罗斯。有些人现在住在俄罗斯。有些人祖父母曾在二战中与法西斯作战。在这里,没有人支持法西斯主义。

我们中有一名乌克兰亲戚和她的儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有朋友躲在防空洞里。我们在空袭后焦急地等待他们的消息,这些空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些的。这是我们亲身体验到的。

您足够信任我们使用我们的程序,我们请求您再次信任我们。我们需要您的帮助。走出家门,抗议这场毫无意义的战争。停止杀戮。说“停止战争!”

🇺🇸 致俄罗斯公民

我们来自世界各地。我们中许多人在俄罗斯和乌克兰都有朋友、家人和同事。有些人出生在俄罗斯。有些人现在住在俄罗斯。有些人祖父母曾在二战中与纳粹作战。在这里,没有人支持法西斯主义。

有一名团队成员有一位乌克兰亲戚和她儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有朋友躲在防空洞里。我们在空袭后焦急地等待他们的消息,这些空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些的。这是我们亲身体验到的。

您足够信任我们使用我们的软件。我们请求您在这件事上相信我们说的是真话。我们需要您的帮助。走出家门,抗议这场不必要的战争。停止杀戮。说“停止战争!”

这是一个旨在演示 Laminas API Tools 的“代码连接”REST API 的库,并且与 Laminas API Tools 文档https://api-tools.getlaminas.org/并行编写。

它使用以下组件

它被编写为一个Laminas模块,但可能被集成到其他应用程序中;使用StatusLib\*Factory类来查看如何注入依赖项。

安装

使用Composer在您的应用程序中安装库

$ composer require laminas-api-tools/statuslib-example

如果您将此作为Laminas或Laminas API Tools应用程序的一部分,可能需要在您的config/application.config.php文件中启用该模块,如果您没有使用laminas-component-installer

return [
    /* ... */
    'modules' => [
        /* ... */
        'StatusLib',
    ],
    /* ... */
];

配置

当作为Laminas模块使用时,您可能需要定义以下配置值,以便告诉库使用哪个适配器以及传递给适配器的选项。

[
    'statuslib' => [
        'db' => 'Name of service providing DB adapter',
        'table' => 'Name of database table within db to use',
        'array_mapper_path' => 'path to PHP file returning an array for use with ArrayMapper',
    ],
    'service_manager' => [
        'aliases' => [
            // Set to either StatusLib\ArrayMapper or StatusLib\TableGatewayMapper
            \StatusLib\Mapper::class => \StatusLib\ArrayMapper::class,
        ],
    ],
]

为了Laminas API Tools示例的目的,我们建议以下配置:

  • 在您的应用程序的data/目录中创建一个名为statuslib.php的PHP文件,该文件返回一个数组

    <?php
    return [];
  • 编辑您的应用程序的config/autoload/local.php文件,将array_mapper_path配置值设置为data/statuslib.php

    <?php
    return [
        /* ... */
        'statuslib' => [
          'array_mapper_path' => 'data/statuslib.php',
        ],
    ];

上述步骤将提供在测试API时实验库所需的最小必要要求。

使用数据库

文件data/statuslib.sqlite.sql包含一个SQLite模式。您可以使用以下方式创建一个SQLite数据库

$ sqlite3 statuslib.db < path/to/data/statuslib.sqlite.sql

该模式可以直接用于其他数据库,或者很容易地修改以与其他数据库一起使用。

在新的Laminas项目中使用StatusLib

  1. 从头开始创建一个新的Laminas项目;我们将使用my-project作为我们的项目文件夹
$ composer create-project laminas/skeleton-application my-project
  1. 安装StatusLib模块
$ composer require laminas-api-tools/statuslib-example
  1. 构建数据源

    • 选项A:数组数据源

      首先,将示例数组复制到应用程序的data目录中

      $ cp vendor/laminas-api-tools/statuslib-example/data/sample-data/array-data.php data/status.data.php

      然后,通过设置一个local.php配置文件来配置此数据源

      $ cp config/autoload/local.php.dist config/autoload/local.php

      接下来,添加基于数组的特定于StatusLib的数据源配置

      'statuslib' => [
         'array_mapper_path' => 'data/status.data.php',
      ],
      'service_manager' => [
          'aliases' => [
              \StatusLib\Mapper::class => \StatusLib\ArrayMapper::class,
          ],
      ],
    • 选项B:SQLite数据源

      首先,创建一个sqlite3数据库,并用示例数据填充它

      $ sqlite3 data/status.db < vendor/laminas-api-tools/statuslib-example/data/statuslib.sqlite.sql
      $ sqlite3 data/status.db < vendor/laminas-api-tools/statuslib-example/data/sample-data/db-sqlite-insert.sql

      然后,通过设置一个local.php配置文件来配置此数据源

      $ cp config/autoload/local.php.dist config/autoload/local.php

      接下来,添加基于SQLite数据库的数据源的特定于StatusLib配置

      'db' => [
          'adapters' => [
              'MyDb' => [
                  'driver' => 'pdo_sqlite',
                  'database' => __DIR__ . '/../../data/status.db'
              ],
          ],
      ],
      'statuslib' => [
          'db' => 'MyDb',
          'table' => 'status',
      ],
      'service_manager' => [
          'aliases' => [
              \StatusLib\Mapper::class => \StatusLib\TableGatewayMapper::class,
          ],
      ],
  2. 创建一个测试脚本以证明数据源正在工作

    // test.php
    namespace StatusLib;
    
    use Laminas\Mvc\Application;
    use Laminas\Stdlib\ArrayUtils;
    
    include 'vendor/autoload.php';
    
    $appConfig = include 'config/application.config.php';
    
    if (file_exists('config/development.config.php')) {
        $appConfig = ArrayUtils::merge(
            $appConfig,
            include 'config/development.config.php'
        );
    }
    
    $app = Application::init($appConfig);
    $services = $app->getServiceManager();
    
    $statusMapper = $services->get(Mapper::class);
    foreach ($statusMapper->fetchAll() as $status) {
        printf(
            "[%d] [%s] %s (by %s)\n",
            $status->timestamp,
            $status->id,
            $status->message,
            $status->user
        );
    }