\Civi - Add facade accessing system services
authorTim Otten <totten@civicrm.org>
Wed, 19 Aug 2015 06:14:27 +0000 (23:14 -0700)
committerTim Otten <totten@civicrm.org>
Thu, 17 Sep 2015 22:44:59 +0000 (15:44 -0700)
Civi.php [new file with mode: 0644]
composer.json

diff --git a/Civi.php b/Civi.php
new file mode 100644 (file)
index 0000000..0d899a6
--- /dev/null
+++ b/Civi.php
@@ -0,0 +1,57 @@
+<?php
+
+/**
+ * Class Civi
+ *
+ * The "Civi" class provides a facade for accessing major subsystems,
+ * such as the service-container and settings manager. It serves as a
+ * bridge which allows procedural code to access important objects.
+ *
+ * General principles:
+ *  - Each function provides access to a major subsystem.
+ *  - Each function performs a simple lookup.
+ *  - Each function returns an interface.
+ *  - Whenever possible, interfaces should be well-known (e.g. based
+ *    on a standard or well-regarded provider).
+ */
+class Civi {
+
+  /**
+   * A central location for static variable storage.
+   *
+   * @code
+   * `Civi::$statics[__CLASS__]['foo'] = 'bar';
+   * @endcode
+   */
+  public static $statics = array();
+
+  /**
+   * Get the service container.
+   *
+   * @return \Symfony\Component\DependencyInjection\ContainerInterface
+   */
+  public static function container() {
+    return Civi\Core\Container::singleton();
+  }
+
+  /**
+   * Fetch a service from the container.
+   *
+   * @param string $id
+   *   The service ID.
+   * @return mixed
+   */
+  public static function service($id) {
+    return \Civi\Core\Container::singleton()->get($id);
+  }
+
+  /**
+   * Reset all ephemeral system state, e.g. statics,
+   * singletons, containers.
+   */
+  public static function reset() {
+    Civi\Core\Container::singleton(TRUE);
+    self::$statics = array();
+  }
+
+}
index 2866db1b7d83bc9feb423bb7e6eef4ccc9d90568..39232d7fad68971696087fc43f1578d7d9c32d23 100644 (file)
@@ -2,6 +2,7 @@
   "autoload": {
     "psr-0": {
       "PHPUnit_": ["packages/"],
+      "Civi": "",
       "Civi\\": [".", "tests/phpunit/"]
     }
   },