laminas-api-tools / statuslib-example
用于与 Laminas API Tools 文档示例一起使用的库
Requires
- php: ^7.3 || ~8.0.0
- laminas-api-tools/api-tools-configuration: ^1.4
- laminas/laminas-config: ^3.4
- laminas/laminas-db: ^2.12
- laminas/laminas-hydrator: ^1.1 || ^2.0 || ^3.0 || ^4.0
- laminas/laminas-paginator: ^2.10
- laminas/laminas-stdlib: ^2.7.7 || ^3.0.1
- laminas/laminas-zendframework-bridge: ^1.0
- ramsey/uuid: ^2.8
Requires (Dev)
- laminas/laminas-coding-standard: ~2.3.0
Replaces
- zfcampus/statuslib-example: ^1.2.0
README
🇷🇺 俄罗斯公民
我们,Laminas 的参与者,来自不同的国家。我们中有许多人在俄罗斯和乌克兰都有朋友、亲戚和同事。有些人出生在俄罗斯。有些人现在住在俄罗斯。有些人祖父母曾在二战中与法西斯作战。在这里,没有人支持法西斯主义。
我们中有一名乌克兰亲戚和她的儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有朋友躲在防空洞里。我们在空袭后焦急地等待他们的消息,这些空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些的。这是我们亲身体验到的。
您足够信任我们使用我们的程序,我们请求您再次信任我们。我们需要您的帮助。走出家门,抗议这场毫无意义的战争。停止杀戮。说“停止战争!”
🇺🇸 致俄罗斯公民
我们来自世界各地。我们中许多人在俄罗斯和乌克兰都有朋友、家人和同事。有些人出生在俄罗斯。有些人现在住在俄罗斯。有些人祖父母曾在二战中与纳粹作战。在这里,没有人支持法西斯主义。
有一名团队成员有一位乌克兰亲戚和她儿子一起逃离了家园。由于前方道路上的轰炸,火车延误了。我们有朋友躲在防空洞里。我们在空袭后焦急地等待他们的消息,这些空袭无差别地攻击医院、学校、幼儿园和房屋。我们不是从任何媒体上得知这些的。这是我们亲身体验到的。
您足够信任我们使用我们的软件。我们请求您在这件事上相信我们说的是真话。我们需要您的帮助。走出家门,抗议这场不必要的战争。停止杀戮。说“停止战争!”
这是一个旨在演示 Laminas API Tools 的“代码连接”REST API 的库,并且与 Laminas API Tools 文档https://api-tools.getlaminas.org/并行编写。
它使用以下组件
- rhumsaa/uuid,一个用于生成和验证 UUID 的库。
- laminas-api-tools/api-tools-configuration,用于提供 PHP 文件作为读取/写入状态消息的可能后端之一。
- laminas/laminas-config,用于
api-tools-configuration
模块实际使用的配置编写器。 - laminas/laminas-db,用于提供数据库表作为读取/写入状态消息的后端。
- laminas/laminas-stdlib,特别是Hydrator子组件,用于将数据从数组转换为对象,以及提供高级数组合并功能的
ArrayUtils
类。 - laminas/laminas-paginator,用于提供分页功能。
它被编写为一个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
- 从头开始创建一个新的Laminas项目;我们将使用
my-project
作为我们的项目文件夹
$ composer create-project laminas/skeleton-application my-project
- 安装StatusLib模块
$ composer require laminas-api-tools/statuslib-example
-
构建数据源
-
选项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, ], ],
-
-
创建一个测试脚本以证明数据源正在工作
// 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 ); }