Commit 2e5f45da authored by Telman Mazhlumov's avatar Telman Mazhlumov

add:

- cache driver folder
- init redis and memcache drivers
- casting fields and converter
parent b25910ac
......@@ -19,10 +19,11 @@
}
],
"require": {
"php" : "~7.0"
"php" : "~7.0",
"ext-json": "*",
"nette/php-generator": "^3.0"
},
"require-dev": {
"nette/php-generator": "^3.0",
"phpunit/phpunit" : "^5.4"
},
"autoload": {
......
......@@ -2,7 +2,9 @@
namespace Defa\BxDal;
use Defa\BxDal\Interfaces\ICacheDriver;
use Defa\BxDal\Interfaces\IDataDriver;
use Defa\BxDal\Interfaces\IValueObject;
use Defa\BxDal\Interfaces\IVOGenerator;
/**
......@@ -21,6 +23,12 @@ abstract class BaseDriver implements Interfaces\IDataDriver
*/
protected $lastAddedUniqueID;
/**
* @var array $casts Кастинг полей и/или свойств
*/
protected $casts = [];
/**
* Возвращает объект, который сгенерирует нужный текущему драйверу ValueObject
*
......@@ -39,12 +47,12 @@ abstract class BaseDriver implements Interfaces\IDataDriver
* Позволяет закэшировать выборку с помощью нужного драйвера. Должен вызываться перед fetch
* Итоговый вывод будет зависеть от наличия данных в кэше
*
* @param string $cacheDriver ? - нужен интерфейс кэширования + добавить реализацию для редиса
* @param ICacheDriver $cacheDriver
* @param string $tag
* @param int $time
* @return IDataDriver
*/
public function byCache(string $cacheDriver, string $tag, int $time = 3600): IDataDriver
public function byCache(ICacheDriver $cacheDriver, string $tag, int $time = 3600): IDataDriver
{
return $this;
}
......@@ -59,4 +67,61 @@ abstract class BaseDriver implements Interfaces\IDataDriver
return (string)$this->lastAddedUniqueID;
}
/**
* @param $attributeKey
* @param $attributeValue
* @return bool|false|float|int|string
*/
protected function cast($attributeKey, $attributeValue)
{
if (\array_key_exists($attributeKey, $this->casts)){
switch ($this->casts[$attributeKey]) {
case 'int':
return (int)$attributeValue;
case 'float':
return (float)$attributeValue;
case 'string':
return (string)$attributeValue;
case 'bool':
return (bool)$attributeValue;
case 'array':
case 'json':
return is_array($attributeValue) ? json_encode($attributeValue) : json_decode($attributeValue, true);
case 'serialize':
return is_string($attributeValue) ? unserialize($attributeValue) : serialize($attributeValue);
case 'date':
return date('d.m.Y', strtotime($attributeValue));
case 'datetime':
return date('d.m.Y H:i:s', strtotime($attributeValue));
case 'timestamp':
return strtotime($attributeValue);
default:
return $attributeValue;
}
}
return $attributeValue;
}
/**
* @param array $attributes
* @return IValueObject
*/
protected function convertToVO(array $attributes): IValueObject
{
//IValueObject::initFromArray
//static::cast
return null;
}
/**
* @param IValueObject $vo
* @return array
*/
protected function convertFromVO(IValueObject $vo): array
{
//IValueObject::initFromArray
//static::cast
return null;
}
}
\ No newline at end of file
......@@ -98,7 +98,7 @@ abstract class BaseValueObject implements IValueObject
}
/**
* Конвертирует ключи в нужный формат
* Конвертирует имеющиеся ключи в нужный формат
*
* @return self
* @throws \RuntimeException
......@@ -109,7 +109,7 @@ abstract class BaseValueObject implements IValueObject
}
/**
* Возвращает префикс, в случае если свойство дублирует поле
* Возвращает префикс, в случае если свойство дублирует основное поле
*
* @return string
*/
......@@ -129,7 +129,7 @@ abstract class BaseValueObject implements IValueObject
}
/**
* Инициализирует объект из массива
* Инициализирует поля объекта из массива
*
* @param array $rawData
* @return IValueObject
......
<?php
namespace Defa\BxDal\CacheDriver;
use Defa\BxDal\Interfaces\ICacheDriver;
/**
* Class Memcache
* @package Defa\BxDal\CacheDriver
*/
class Memcache implements ICacheDriver
{
}
\ No newline at end of file
<?php
namespace Defa\BxDal\CacheDriver;
use Defa\BxDal\Interfaces\ICacheDriver;
/**
* Class Redis
* @package Defa\BxDal\CacheDriver
*/
class Redis implements s
{
}
\ No newline at end of file
......@@ -56,11 +56,11 @@ class Config
}
/**
* Загружает сторонний конфиг, если он был указан через переменные окружения (BX_DAL_CONFIG)
* Загружает сторонний конфиг, если он был указан через переменные окружения (DEFA_DAL_CONFIG)
*/
private static function loadConfig()
{
$configPath = getenv('BX_DAL_CONFIG');
$configPath = getenv('DEFA_DAL_CONFIG');
if ($configPath !== false && file_exists($configPath)) {
try {
......
......@@ -8,37 +8,42 @@ use Defa\BxDal\BaseDriver;
use Defa\BxDal\Interfaces\IDataDriver;
use Defa\BxDal\Interfaces\IValueObject;
class IBlockElement extends BaseDriver
abstract class IBlockElement extends BaseDriver
{
/**
*
*/
const VO_GENERATOR = '';
/**
* @var int $iblockID идентификатор инфоблока
*/
private $iblockID;
protected $iblockID;
/**
* @var array $filter Фильтр
*/
private $filter = [];
protected $filter = [];
/**
* @var array $order сортировка
*/
private $order = [];
protected $order = [];
/**
* @var int|null $offset Сдвиг
*/
private $offset;
protected $offset;
/**
* @var int|null $limit лимит
*/
private $limit;
protected $limit;
/**
* @var array $select Выборка
*/
private $select = ['IBLOCK_ID', 'ID', 'NAME'];
protected $select = ['IBLOCK_ID', 'ID', 'NAME'];
/**
* IBlockElement constructor.
......@@ -58,7 +63,7 @@ class IBlockElement extends BaseDriver
}
/**
* Возвращает не обработанные данные (аналог Fetch)
* Возвращает данные
*
* @param bool $sanitize
* @return IValueObject[]
......@@ -66,11 +71,11 @@ class IBlockElement extends BaseDriver
public function fetch(bool $sanitize = false): array
{
$args = [
$this->order,
$this->filter,
$this->order ?? [],
$this->filter ?? [],
false,
$this->offset !== null || $this->limit !== null ? : false,
$this->select
$this->select ?? []
];
$res = \CIBlockElement::GetList(...$args);
......
<?php
namespace Defa\BxDal\Drivers\IBlock\VOGenerator;
use Defa\BxDal\BaseVOGenerator;
class IBlockElement extends BaseVOGenerator
{
/**
* Генерация
*
* @return void
*/
public function generate()
{
// TODO: Implement generate() method.
}
/**
* Возвращает префикс, в случае если свойство дублирует поле
*
* @return string
*/
public function prefixForDuplicateProp(): string
{
// TODO: Implement prefixForDuplicateProp() method.
}
}
\ No newline at end of file
<?php
namespace Defa\BxDal\Drivers\IBlock\VOGenerator;
use Defa\BxDal\BaseVOGenerator;
class IBlockSection extends BaseVOGenerator
{
/**
* Генерация
*
* @return void
*/
public function generate()
{
// TODO: Implement generate() method.
}
/**
* Возвращает префикс, в случае если свойство дублирует поле
*
* @return string
*/
public function prefixForDuplicateProp(): string
{
// TODO: Implement prefixForDuplicateProp() method.
}
}
\ No newline at end of file
<?php
namespace Defa\BxDal\Interfaces;
/**
* Interface ICacheDriver
* @package Defa\BxDal\Interfaces
*/
interface ICacheDriver
{
}
\ No newline at end of file
......@@ -52,12 +52,12 @@ interface IDataDriver
* Позволяет закэшировать выборку с помощью нужного драйвера. Должен вызываться перед fetch/get
* Итоговый вывод будет зависеть от наличия данных в кэше
*
* @param string $cacheDriver ? - нужен интерфейс
* @param ICacheDriver $cacheDriver
* @param string $tag
* @param int $time
* @return IDataDriver
*/
public function byCache(string $cacheDriver, string $tag, int $time = 3600): IDataDriver;
public function byCache(ICacheDriver $cacheDriver, string $tag, int $time = 3600): IDataDriver;
/**
* @param IValueObject $element
......
......@@ -8,6 +8,11 @@ namespace Defa\BxDal\Interfaces;
*/
interface IVOGenerator
{
/**
* Генерация
*
* @return void
*/
public function generate();
/**
......@@ -16,6 +21,4 @@ interface IVOGenerator
* @return string
*/
public function prefixForDuplicateProp(): string;
public function getVOClassName(): string;
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment