cindyullmann / statuslib-example
用于与 Laminas API Tools 文档示例一起使用的库
Requires
- php: ^7.3 || ~8.0.0 || ^8.1
- laminas-api-tools/api-tools-configuration: ^1.6
- laminas/laminas-config: ^3.9
- laminas/laminas-db: ^2.13
- laminas/laminas-hydrator: ^1.1 || ^2.0 || ^3.0 || ^4.0
- laminas/laminas-paginator: ^2.12
- laminas/laminas-stdlib: ^3.19
- laminas/laminas-zendframework-bridge: ^1.8
- ramsey/uuid: ~5
Replaces
- zfcampus/statuslib-example: ^1.2.0
README
🇷🇺 俄罗斯公民
我们,Laminas 的参与者,来自不同的国家。我们中许多人都有在俄罗斯和乌克兰的朋友、亲戚和同事。其中一些人出生在俄罗斯。一些人现在住在俄罗斯。一些人祖父母曾在二战中与法西斯战斗。这里没有人支持法西斯主义。
我们中有一位成员有一位乌克兰亲戚,她和儿子一起逃离了家园。火车因前方道路上的轰炸而延误。我们有朋友躲在防空洞里。我们在空袭后焦急地等待他们的消息,空袭无差别地轰炸医院、学校、幼儿园和房屋。我们不依赖任何媒体。我们直接观察到了这一切。
您足够信任我们,使用我们的程序,我们再次请求您信任我们。我们需要您的帮助。走出家门,抗议这场无意义的战争。停止杀戮。说“停止战争!”
🇺🇸 致俄罗斯公民
我们Laminas来自世界各地。我们中许多人都有在俄罗斯和乌克兰的朋友、家人和同事。我们中一些人出生在俄罗斯。一些人现在住在俄罗斯。一些人祖父母曾在二战中与纳粹战斗。这里没有人支持法西斯主义。
我们团队成员中有一位乌克兰亲戚,她和儿子一起逃离了家园。火车因前方道路上的轰炸而延误。我们有朋友躲在防空洞里。我们在空袭后焦急地等待他们的消息,空袭无差别地轰炸医院、学校、幼儿园和房屋。我们不依赖任何媒体。这是我们的亲身经历。
您足够信任我们,使用我们的软件。我们请求您相信我们在这一点上的直言不讳。我们需要您的帮助。走出家门,抗议这场无谓的战争。停止杀戮。说“停止战争!”
这是一个旨在展示 Laminas API Tools “代码连接” REST API 的库,并且与 Laminas API Tools 文档 并行编写。
它使用以下组件
- 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 ); }