Skip to content
Browse files

Initial Commit.

  • Loading branch information...
0 parents commit 6854bb9498c3ed7f6cb20faaefad1e7c72bbadec @jtopjian jtopjian committed Jan 16, 2009
Showing with 83 additions and 0 deletions.
  1. +8 −0 README
  2. +75 −0 glue.php
8 README
@@ -0,0 +1,8 @@
+Glue
+====
+
+Author: Joe Topjian, joe@topjian.net
+
+Glue is a simple PHP class that maps URLs to classes. The concepts are similar to web.py for Python.
+
+Information on how to use Glue can be found at http://gluephp.com.
75 glue.php
@@ -0,0 +1,75 @@
+<?php
+
+ /**
+ * glue
+ *
+ * Provides an easy way to map URLs to classes. URLs can be literal
+ * strings or regular expressions.
+ *
+ * When the URLs are processed:
+ * * deliminators (/) are automatically escaped: (\/)
+ * * The beginning and end are anchored (^ $)
+ * * An optional end slash is added (/?)
+ * * The i option is added for case-insensitive searches
+ *
+ * Example:
+ *
+ * $urls = array(
+ * '/' => 'index',
+ * '/page/(\d+) => 'page'
+ * );
+ *
+ * class page {
+ * function GET($matches) {
+ * echo "Your requested page " . $matches[1];
+ * }
+ * }
+ *
+ * glue::stick($urls);
+ *
+ */
+ class glue {
+
+ /**
+ * stick
+ *
+ * the main static function of the glue class.
+ *
+ * @param array $urls The regex-based url to class mapping
+ * @throws Exception Thrown if corresponding class is not found
+ * @throws Exception Thrown if no match is found
+ * @throws BadMethodCallException Thrown if a corresponding GET,POST is not found
+ *
+ */
+ static function stick ($urls) {
+
+ $method = strtoupper($_SERVER['REQUEST_METHOD']);
+ $path = $_SERVER['REQUEST_URI'];
+
+ $found = false;
+
+ krsort($urls);
+
+ foreach ($urls as $regex => $class) {
+ $regex = str_replace('/', '\/', $regex);
+ $regex = '^' . $regex . '\/?$';
+ if (preg_match("/$regex/i", $path, $matches)) {
+ $found = true;
+ if (class_exists($class)) {
+ $obj = new $class;
+ if (method_exists($obj, $method)) {
+ $obj->$method($matches);
+ } else {
+ throw new BadMethodCallException("Method, $method, not supported.");
+ }
+ } else {
+ throw new Exception("Class, $class, not found.");
+ }
+ break;
+ }
+ }
+ if (!$found) {
+ throw new Exception("URL, $path, not found.");
+ }
+ }
+ }

0 comments on commit 6854bb9

Please sign in to comment.
Something went wrong with that request. Please try again.