structured project
This commit is contained in:
117
src/DbMapping.php
Normal file
117
src/DbMapping.php
Normal file
@@ -0,0 +1,117 @@
|
||||
<?php
|
||||
|
||||
namespace BSR\Db;
|
||||
|
||||
use BSR\Db\Exception\InvalidAttributeException;
|
||||
|
||||
/**
|
||||
* Base class for mapping objects. inherit you database filled objects from here.
|
||||
*
|
||||
* @property int $id
|
||||
*/
|
||||
abstract class DbMapping
|
||||
{
|
||||
protected $attributes;
|
||||
protected $attributeNames = '';
|
||||
protected $privateAttributeNames = '';
|
||||
|
||||
/**
|
||||
* @param array $attributes
|
||||
*/
|
||||
public function __construct(array $attributes)
|
||||
{
|
||||
$this->setAttributes($attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Define a bunch of attribute given by an associative array
|
||||
* @param array $attributes
|
||||
*/
|
||||
public function setAttributes(array $attributes)
|
||||
{
|
||||
$this->assertAttributes($attributes);
|
||||
foreach ($attributes as $key => $value) {
|
||||
$this->__set($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure that all keys from attributes are authorized
|
||||
* @param array $attributes
|
||||
*/
|
||||
private function assertAttributes(array $attributes)
|
||||
{
|
||||
foreach ($attributes as $key => $value) {
|
||||
$this->assertAttribute($key);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure that name attribute is authorized
|
||||
* If public_only is false, check against PRIVATE_ATTRIBUTES_NAME too.
|
||||
* Those one cannot be accessed via setAttributes and other batch methods.
|
||||
* @param string $name
|
||||
* @param bool $public_only
|
||||
* @throws InvalidAttributeException if the attribute is not a valid one
|
||||
*/
|
||||
private function assertAttribute($name, $public_only = TRUE)
|
||||
{
|
||||
if (strpos($this->attributeNames, $name) === false && ($public_only || strpos($this->privateAttributeNames, $name) === false)) {
|
||||
throw(new InvalidAttributeException("The attribute $name is invalid"));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a user attribute or the linked wishes
|
||||
|
||||
* @param string $name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($name)
|
||||
{
|
||||
$sql_safe = FALSE;
|
||||
if (strpos($name, 'sql_') === 0) {
|
||||
$name = substr($name, 4);
|
||||
$sql_safe = TRUE;
|
||||
}
|
||||
$this->assertAttribute($name, false);
|
||||
if (isset($this->attributes[$name])) {
|
||||
$value = $this->attributes[$name];
|
||||
if ($sql_safe) {
|
||||
$value = str_replace("'", "''", $value);
|
||||
}
|
||||
return $value;
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
public function to_array() {
|
||||
return $this->attributes;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a user attribute
|
||||
* @param string $name
|
||||
* @param mixed $value
|
||||
*/
|
||||
public function __set($name, $value)
|
||||
{
|
||||
$this->assertAttribute($name, false);
|
||||
$this->attributes[$name] = $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return all the public attributes in an array;
|
||||
*/
|
||||
public function toArray()
|
||||
{
|
||||
$result = array();
|
||||
foreach ($this->attributes as $name => $value) {
|
||||
if (strpos($this->attributeNames, $name) !== false) {
|
||||
$result[$name] = $value;
|
||||
}
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user