From 32c061b7594631de3d6c392c8aa6a9c5a32b904c Mon Sep 17 00:00:00 2001 From: Awilum Date: Wed, 27 Feb 2019 16:21:12 +0300 Subject: [PATCH] Flextype Slim Integration - next round of integration --- flextype/Cache.php | 153 ++++++++++++++--------------------------- flextype/Entries.php | 12 ++-- flextype/Plugins.php | 13 +++- flextype/bootstrap.php | 10 ++- 4 files changed, 74 insertions(+), 114 deletions(-) diff --git a/flextype/Cache.php b/flextype/Cache.php index 1598c478..74a259e5 100755 --- a/flextype/Cache.php +++ b/flextype/Cache.php @@ -18,135 +18,99 @@ use \Doctrine\Common\Cache as DoctrineCache; class Cache { - /** - * An instance of the Cache class - * - * @var object - * @access private - */ - private static $instance = null; - /** * Unique cache key * * @var string Cache key. */ - protected static $key; + private $key; /** * Lifetime * * @var int Lifetime. */ - protected static $lifetime; + private $lifetime; /** * Current time * * @var int Current time. */ - protected static $now; + private $now; /** * Cache Driver * * @var DoctrineCache */ - protected static $driver; - - /** - * Private clone method to enforce singleton behavior. - * - * @access private - */ - private function __clone() - { - } - - /** - * Private wakeup method to enforce singleton behavior. - * - * @access private - */ - private function __wakeup() - { - } + private $driver; /** * Private construct method to enforce singleton behavior. * * @access private */ - private function __construct() - { - Cache::init(); - } - - /** - * Init Cache - * - * @access protected - * @return void - */ - protected static function init() : void + public function __construct() { // Create Cache Directory !Filesystem::has(PATH['cache']) and Filesystem::createDir(PATH['cache']); // Set current time - Cache::$now = time(); + $this->now = time(); // Create cache key to allow invalidate all cache on configuration changes. - Cache::$key = (Registry::get('settings.cache.prefix') ?? 'flextype') . '-' . md5(PATH['site'] . 'Flextype::VERSION'); + $this->key = (Registry::get('settings.cache.prefix') ?? 'flextype') . '-' . md5(PATH['site'] . 'Flextype::VERSION'); // Get Cache Driver - Cache::$driver = Cache::getCacheDriver(); + $this->driver = $this->getCacheDriver(); // Set the cache namespace to our unique key - Cache::$driver->setNamespace(Cache::$key); + $this->driver->setNamespace($this->$key); } + /** * Get Cache Driver * * @access public * @return object */ - public static function getCacheDriver() + public function getCacheDriver() { // Try to set default cache driver name - $driver_name = Cache::setDefaultCacheDriverName(Registry::get('settings.cache.driver')); + $driver_name = $this->setDefaultCacheDriverName(Registry::get('settings.cache.driver')); // Set cache driver - return Cache::setCacheDriver($driver_name); + return $this->setCacheDriver($driver_name); } - protected static function setCacheDriver(string $driver_name) + protected function setCacheDriver(string $driver_name) { switch ($driver_name) { case 'apcu': - $driver = Cache::setApcuCacheDriver(); + $driver = $this->setApcuCacheDriver(); break; case 'array': - $driver = Cache::setArrayCacheDriver(); + $driver = $this->setArrayCacheDriver(); break; case 'wincache': - $driver = Cache::setWinCacheDriver(); + $driver = $this->setWinCacheDriver(); break; case 'memcached': - $driver = Cache::setMemcachedCacheDriver(); + $driver = $this->setMemcachedCacheDriver(); break; case 'sqlite3': - $driver = Cache::setSQLite3CacheDriver(); + $driver = $this->setSQLite3CacheDriver(); break; case 'zend': - $driver = Cache::setZendDataCacheDriver(); + $driver = $this->setZendDataCacheDriver(); break; case 'redis': - $driver = Cache::setRedisCacheDriver(); + $driver = $this->setRedisCacheDriver(); break; default: - $driver = Cache::setFilesystemCacheDriver(); + $driver = $this->setFilesystemCacheDriver(); break; } @@ -158,7 +122,7 @@ class Cache * * @access protected */ - protected static function setZendDataCacheDriver() + protected function setZendDataCacheDriver() { $driver = new DoctrineCache\ZendDataCache(); @@ -171,7 +135,7 @@ class Cache * * @access protected */ - protected static function setSQLite3CacheDriver() + protected function setSQLite3CacheDriver() { // Cache directory $cache_directory = PATH['cache'] . '/doctrine/'; @@ -190,7 +154,7 @@ class Cache * * @access protected */ - protected static function setMemcachedCacheDriver() + protected function setMemcachedCacheDriver() { $memcached = new \Memcached(); $memcached->addServer( @@ -210,7 +174,7 @@ class Cache * * @access protected */ - protected static function setWinCacheDriver() + protected function setWinCacheDriver() { $driver = new DoctrineCache\WinCacheCache(); @@ -222,7 +186,7 @@ class Cache * This can be useful for caching things in memory for a single process when you don't need the cache to be persistent across processes. * @access protected */ - protected static function setArrayCacheDriver() + protected function setArrayCacheDriver() { $driver = new DoctrineCache\ArrayCache(); @@ -235,7 +199,7 @@ class Cache * * @access protected */ - protected static function setApcuCacheDriver() + protected function setApcuCacheDriver() { $driver = new DoctrineCache\ApcuCache(); @@ -248,7 +212,7 @@ class Cache * * @access protected */ - protected static function setRedisCacheDriver() + protected function setRedisCacheDriver() { $redis = new \Redis(); $socket = Registry::get('settings.cache.redis.socket', false); @@ -279,7 +243,7 @@ class Cache * * @access protected */ - protected static function setFilesystemCacheDriver() + protected function setFilesystemCacheDriver() { // Cache directory $cache_directory = PATH['cache'] . '/doctrine/'; @@ -298,7 +262,7 @@ class Cache * @param string $driver_name Driver name. * @return string */ - protected static function setDefaultCacheDriverName(string $driver_name) + protected function setDefaultCacheDriverName(string $driver_name) { if (!$driver_name || $driver_name == 'auto') { if (extension_loaded('apcu')) { @@ -319,9 +283,9 @@ class Cache * @access public * @return object */ - public static function driver() + public function driver() { - return Cache::$driver; + return $this->$driver; } /** @@ -330,9 +294,9 @@ class Cache * @access public * @return string */ - public static function getKey() : string + public function getKey() : string { - return Cache::$key; + return $this->$key; } /** @@ -342,10 +306,10 @@ class Cache * @param string $id The id of the cache entry to fetch. * @return mixed The cached data or FALSE, if no cache entry exists for the given id. */ - public static function fetch(string $id) + public function fetch(string $id) { if (Registry::get('settings.cache.enabled')) { - return Cache::$driver->fetch($id); + return $this->$driver->fetch($id); } else { return false; } @@ -357,10 +321,10 @@ class Cache * @param string $id the id of the cached data entry * @return bool true if the cached items exists */ - public static function contains($id) + public function contains($id) { if (Registry::get('settings.cache.enabled')) { - return Cache::$driver->contains(($id)); + return $this->$driver->contains(($id)); } else { return false; } @@ -376,20 +340,20 @@ class Cache * If zero (the default), the entry never expires (although it may be deleted from the cache * to make place for other entries). */ - public static function save(string $id, $data, $lifetime = null) + public function save(string $id, $data, $lifetime = null) { if (Registry::get('settings.cache.enabled')) { if ($lifetime === null) { - $lifetime = Cache::getLifetime(); + $lifetime = $this->getLifetime(); } - Cache::$driver->save($id, $data, $lifetime); + $this->$driver->save($id, $data, $lifetime); } } /** * Clear Cache */ - public static function clear() : void + public function clear() : void { // Clear stat cache @clearstatcache(); @@ -408,16 +372,16 @@ class Cache * @access public * @param int $future timestamp */ - public static function setLifetime(int $future) + public function setLifetime(int $future) { if (!$future) { return; } - $interval = $future-Cache::$now; + $interval = $future-$this->$now; - if ($interval > 0 && $interval < Cache::getLifetime()) { - Cache::$lifetime = $interval; + if ($interval > 0 && $interval < $this->getLifetime()) { + $this->$lifetime = $interval; } } @@ -427,27 +391,12 @@ class Cache * @access public * @return mixed */ - public static function getLifetime() + public function getLifetime() { - if (Cache::$lifetime === null) { - Cache::$lifetime = Registry::get('settings.cache.lifetime') ?: 604800; + if ($this->$lifetime === null) { + $this->$lifetime = Registry::get('settings.cache.lifetime') ?: 604800; } - return Cache::$lifetime; - } - - /** - * Get the Cache instance. - * - * @access public - * @return object - */ - public static function getInstance() - { - if (is_null(Cache::$instance)) { - Cache::$instance = new self; - } - - return Cache::$instance; + return $this->$lifetime; } } diff --git a/flextype/Entries.php b/flextype/Entries.php index 999cc65b..87c27662 100755 --- a/flextype/Entries.php +++ b/flextype/Entries.php @@ -49,8 +49,8 @@ class Entries $cache_id = md5('entry' . $entry_file . ((Filesystem::getTimestamp($entry_file) === false) ? '' : Filesystem::getTimestamp($entry_file))); // Try to get the entry from cache - if (Cache::contains($cache_id)) { - if ($entry_decoded = Cache::fetch($cache_id)) { + if ($this->flextype['cache']->contains($cache_id)) { + if ($entry_decoded = $this->flextype['cache']->fetch($cache_id)) { // Apply Shortcodes for each entry fields foreach ($entry_decoded as $key => $_entry_decoded) { @@ -71,7 +71,7 @@ class Entries $entry_decoded['slug'] = $entry_decoded['slug'] ?? ltrim(rtrim($entry, '/'), '/'); // Save to cache - Cache::save($cache_id, $entry_decoded); + $this->flextype['cache']->save($cache_id, $entry_decoded); // Apply Shortcodes for each entry fields foreach ($entry_decoded as $key => $_entry_decoded) { @@ -128,8 +128,8 @@ class Entries } } - if (Cache::contains($cache_id)) { - $entries = Cache::fetch($cache_id); + if ($this->flextype['cache']->contains($cache_id)) { + $entries = $this->flextype['cache']->fetch($cache_id); } else { // Create entries array from entries list and ignore current requested entry @@ -143,7 +143,7 @@ class Entries } } - Cache::save($cache_id, $entries); + $this->flextype['cache']->save($cache_id, $entries); } // Sort and Slice entries if $raw === false diff --git a/flextype/Plugins.php b/flextype/Plugins.php index bdce39f2..f6891e13 100755 --- a/flextype/Plugins.php +++ b/flextype/Plugins.php @@ -19,6 +19,12 @@ use Flextype\Component\Registry\Registry; class Plugins { + + /** + * Flextype Dependency Container + */ + private $flextype; + /** * Locales array * @@ -33,6 +39,7 @@ class Plugins */ public function __construct($flextype, $app) { + $this->flextype = $flextype; $this->locales = include_once ROOT_DIR . '/flextype/locales/Locales.php'; $this->init($flextype, $app); } @@ -58,8 +65,8 @@ class Plugins if (is_array($plugins_list) && count($plugins_list) > 0) { // Get plugins list from cache or scan plugins folder and create new plugins cache item - if (Cache::contains($plugins_cache_id)) { - Registry::set('plugins', Cache::fetch($plugins_cache_id)); + if ($this->flextype['cache']->contains($plugins_cache_id)) { + Registry::set('plugins', $this->flextype['cache']->fetch($plugins_cache_id)); } else { // If Plugins List isnt empty @@ -92,7 +99,7 @@ class Plugins } Registry::set('plugins', $_plugins_config); - Cache::save($plugins_cache_id, $_plugins_config); + $this->flextype['cache']->save($plugins_cache_id, $_plugins_config); } } diff --git a/flextype/bootstrap.php b/flextype/bootstrap.php index 6e610775..84d3b3cf 100755 --- a/flextype/bootstrap.php +++ b/flextype/bootstrap.php @@ -96,9 +96,6 @@ date_default_timezone_set(Registry::get('settings.timezone')); // Start the session Session::start(); -// Get Cache Instance -Cache::getInstance(); - // Get Themes Instance //Themes::getInstance(); @@ -134,6 +131,13 @@ $app = new \Slim\App($config); */ $flextype = $app->getContainer(); +/** + * Add fieldsets service to Flextype container + */ +$flextype['cache'] = function($container) { + return new Cache(); +}; + /** * Add images service to Flextype container */