Awesome
currentMenu: home
BlackBox
BlackBox is a storage library that abstracts backends and data transformation behind simple interfaces.
Store data. "Where" and "how" can be decided later.
Experimental: this project is still at the state of experimentation. Use with caution.
Usage
The API is defined by interfaces and is extremely simple.
namespace BlackBox;
interface Storage extends Traversable
{
public function get(string $id);
public function set(string $id, $data) : void;
public function remove(string $id) : void;
}
$storage->set('foo', 'Hello World!');
echo $storage->get('foo'); // Hello World!
foreach ($storage as $key => $item) {
echo $key; // foo
echo $item; // Hello World!
}
You can read all about those interfaces in the Interfaces documentation.
Features
BlackBox can store data in:
- files
- database (MySQL, PostgreSQL, SQLite, Oracle, …) using Doctrine DBAL
- PHP arrays (i.e. in memory)
Data can optionally be:
- stored in JSON
- stored in YAML
- encrypted with AES
Additionally a storage can be cached with another (e.g. cache a DB storage with a Redis or array storage).
Backends
Backends are classes that implement Storage
:
FileStorage
DirectoryStorage
DatabaseTable
ArrayStorage
You can read all about backends in the Backends documentation.
Transformers
Transformers transform data before storage and after retrieval:
JsonEncoder
YamlEncoder
ObjectArrayMapper
AesEncrypter
You can read all about transformers in the Transformers documentation.
// Encode the data in JSON
$storage = new JsonEncoder(
// Store data in files
new DirectoryStorage('some/directory')
);
$storage->set('foo', [
'name' => 'Lebowski',
]);
// will encode it in JSON
// then will store it into a file
$data = $storage->get('foo');
// will read from the file
// then will decode the JSON
echo $data['name']; // Lebowski
License
BlackBox is released under the MIT license.