\Civi::cache() - Add shorthand for accessing cache.
authorTim Otten <totten@civicrm.org>
Wed, 19 Aug 2015 13:26:57 +0000 (06:26 -0700)
committerTim Otten <totten@civicrm.org>
Thu, 17 Sep 2015 22:44:59 +0000 (15:44 -0700)
CRM/Utils/Cache/Interface.php
Civi.php
Civi/Core/Container.php

index 4363d51f6f9192f9e69e112118eb2b3cc187d8b8..f702114bf8891c3d871f8d714cf435e1677f853a 100644 (file)
  *
  * @package CRM
  * @copyright CiviCRM LLC (c) 2004-2015
+ *
+ * CRM_Utils_Cache_Interface
+ *
+ * PHP-FIG has been developing a draft standard for caching,
+ * PSR-6. The standard has not been ratified yet. When
+ * making changes to this interface, please take care to
+ * avoid *conflicst* with PSR-6's CacheItemPoolInterface. At
+ * time of writing, they do not conflict. Avoiding conflicts
+ * will enable more transition paths where Civi
+ * simultaneously supports both interfaces in the same
+ * implementation.
+ *
+ * For example, the current interface defines:
+ *
+ *   function get($key) => mixed $value
+ *
+ * and PSR-6 defines:
+ *
+ *   function getItem($key) => ItemInterface $item
+ *
+ * These are different styles (e.g. "weak item" vs "strong item"),
+ * but the two methods do not *conflict*. They can coexist,
+ * and you can trivially write adapters between the two.
+ *
+ * @see https://github.com/php-fig/fig-standards/blob/master/proposed/cache.md
  */
 interface CRM_Utils_Cache_Interface {
 
index 0d899a65f4e7594efc7a23432c8b8332594627a3..d4fe840ce686748d75395e73409542f7051c8a47 100644 (file)
--- a/Civi.php
+++ b/Civi.php
@@ -25,6 +25,26 @@ class Civi {
    */
   public static $statics = array();
 
+  /**
+   * EXPERIMENTAL. Retrieve a named cache instance.
+   *
+   * This interface is flagged as experimental due to political
+   * ambiguity in PHP community -- PHP-FIG has an open but
+   * somewhat controversial draft standard for caching. Based on
+   * the current draft, it's expected that this function could
+   * simultaneously support both CRM_Utils_Cache_Interface and
+   * PSR-6, but that depends on whether PSR-6 changes any more.
+   *
+   * @param string $name
+   *   The name of the cache. The 'default' cache is biased toward
+   *   high-performance caches (eg memcache/redis/apc) when
+   *   available and falls back to single-request (static) caching.
+   * @return CRM_Utils_Cache_Interface
+   */
+  public static function cache($name = 'default') {
+    return \Civi\Core\Container::singleton()->get('cache.' . $name);
+  }
+
   /**
    * Get the service container.
    *
index 526ee9463f4eb7e39d4e0c69deb9b45f21dcee5d..7b4b611468955c2955a7841f3667025ab4df4f7e 100644 (file)
@@ -110,6 +110,7 @@ class Container {
     $singletons = array(
       'resources' => 'CRM_Core_Resources',
       'httpClient' => 'CRM_Utils_HttpClient',
+      'cache.default' => 'CRM_Utils_Cache',
       // Maybe? 'config' => 'CRM_Core_Config',
       // Maybe? 'smarty' => 'CRM_Core_Smarty',
     );