persistr
PHP 5.5+ lightweight persistence layer, (*1)
, (*2)
Installation
Install via composer:, (*3)
php composer.phar require jgswift/persistr:dev-master
Usage
persistr is a lightweight php package which implements a loose persistence layer., (*4)
persistr does not necessarily use annotations or otherwise any kind of model metadata when defining models. However, that does not preclude the inclusion of a formal modeling component, (*5)
Additionally, persistr Models may be solely relied on for any data source transactions. It is typically bad practice to put platform-dependant code in the Persistent interface implementation. Such code is only appropriate on the model itself., (*6)
persistr assumes you know how to interact with your respective data-source and is not a full-on database abstraction layer, (*7)
persistr makes the distinction between persistence implementations for objects based on signature criteria such as the presence of traits, interfaces, or even simply an individual class name alone, (*8)
When persistence is applied to an individual class, all inheriting classes naturally have the same extensions by default, (*9)
The following is a default example with a blank model using an interface/trait pair signature (the interface is the distinct element by default), (*10)
<?php
class MyUser implements persistr\Interfaces\Persistent {
use persistr\Persistent;
}
$user = new MyUser;
$model = $user->getModel();
$model->bind('foo',function() {
return 'bar';
});
$value = $user->foo;
var_dump($value); // returns 'bar'
It is not necessary to specify the interface on class above, as the signature is already recognized simply given a trait. Multiple identification techniques are available, namely trait, interface, class., (*11)
Below is an example of setting up a custom class-based persistence interface., (*12)
First we start by defining a model class, input/output filters, and finally register it to the persistence layer., (*13)
// MODEL CLASS
class MyUserModel implements persistr\Interfaces\Model {
private $className;
private static $registry;
function __construct($className) {
$this->className = $className;
if(empty(self::$registry)) {
self::$registry = new persistr\Object\Registry($this,$className);
}
}
public function getClassName() {
return $this->className;
}
public function getRegistry() {
return self::$registry;
}
public function bind($attribute, callable $callable=null) {
persistr\Object\Binding\Registry::bind(self::$registry->getTypeName(), $attribute, $callable);
return $this;
}
public function bindTo($object,$attribute,callable $callable=null) {
persistr\Object\Binding\Registry::bindTo($object, $attribute, $callable);
return $this;
}
}
// PERSISTENCE REGISTRATION
$persistor = new persistr\Persistor('MyUser');
persistr\Registry::register($persistor);
$model = new MyUserModel('MyUser');
$persistor->getDataSource()->insert('MyUser',$model);
Now when a MyUser object is instantiated, the given MyUserModel model will be used to map the object., (*14)