StatusLib
Repository abandoned 2019-12-31
This repository has moved to laminas-api-tools/statuslib-example., (*1)
This is a library designed to demonstrate an Apigility "Code-Connected"
REST API, and has been written in parallel with the Apigility documentation., (*2)
It uses the following components:, (*3)
It is written as a Zend Framework module, but could potentially be dropped into other
applications; use the StatusLib\*Factory classes to see how dependencies might be injected., (*4)
Installation
Use Composer to install the library in your application:, (*5)
$ composer require zfcampus/statuslib-example
If you are using this as part of a Zend Framework or Apigility application, you
may need to enable the module in your config/application.config.php file, if
you are not using the zend-component-installer:, (*6)
return [
/* ... */
'modules' => [
/* ... */
'StatusLib',
],
/* ... */
];
Configuration
When used as a Zend Framework module, you may define the following configuration values in order
to tell the library which adapter to use, and what options to pass to that adapter., (*7)
[
'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,
],
],
]
For purposes of the Apigility examples, we suggest the following:, (*8)
-
Create a PHP file in your application's data/ directory named statuslib.php that returns an
array:, (*9)
<?php
return [];
-
Edit your application's config/autoload/local.php file to set the array_mapper_path
configuration value to data/statuslib.php:, (*10)
<?php
return [
/* ... */
'statuslib' => [
'array_mapper_path' => 'data/statuslib.php',
],
];
The above will provide the minimum necessary requirements for experimenting with the library in
order to test an API., (*11)
Using a database
The file data/statuslib.sqlite.sql contains a SQLite schema. You can
create a SQLite database using:, (*12)
$ sqlite3 statuslib.db < path/to/data/statuslib.sqlite.sql
The schema can be either used directly by other databases, or easily modified to work with other
databases., (*13)
StatusLib in a New Zend Framework Project
-
Create a new Zend Framework project from scratch; we'll use my-project as our project folder:, (*14)
$ composer create-project zendframework/skeleton-application my-project
-
Install the StatusLib module:, (*15)
$ composer require zfcampus/statuslib-example
-
Build a DataSource, (*16)
-
Option A: Array data source:, (*17)
First, copy the sample array to the data directory of thet application:, (*18)
$ cp vendor/zfcampus/statuslib-example/data/sample-data/array-data.php data/status.data.php
Then, configure this datasource by setting up a local.php configuration file:, (*19)
$ cp config/autoload/local.php.dist config/autoload/local.php
Next, add the StatusLib specific configuration for an array based data source:, (*20)
'statuslib' => [
'array_mapper_path' => 'data/status.data.php',
],
'service_manager' => [
'aliases' => [
\StatusLib\Mapper::class => \StatusLib\ArrayMapper::class,
],
],
-
Option B: Sqlite data source:, (*21)
First, create a sqlite3 database, and fill it with the sample data:, (*22)
$ sqlite3 data/status.db < vendor/zfcampus/statuslib-example/data/statuslib.sqlite.sql
$ sqlite3 data/status.db < vendor/zfcampus/statuslib-example/data/sample-data/db-sqlite-insert.sql
Then, configure this datasource by setting up a local.php configuration file:, (*23)
$ cp config/autoload/local.php.dist config/autoload/local.php
Next, add the StatusLib specific configuration for a sqlite database based data source:, (*24)
'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,
],
],
-
Create a test script to prove the data source is working:, (*25)
// test.php
namespace StatusLib;
use Zend\Mvc\Application;
use Zend\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
);
}