diff --git a/README.md b/README.md index 99ec431..55afbc8 100644 --- a/README.md +++ b/README.md @@ -75,6 +75,7 @@ All this middleware does is check if there is a GET or a POST variable by the na * `Rack::add($name, $file = null)` — Add middleware class with name `$name`, and require file `$file` if set, and file exists. * `Rack::insert_before($target, $name, $file = null)` — Same as `Rack::add()`, except that instead of placing the new middleware at the end of the stack, it is inserted before the middleware `$name`. * `Rack::insert_after($target, $name, $file = null)` — Same as `Rack::insert_before()`, except new middleware is inserted after `$target`. +* `Rack::swap($target, $name, $file = null)` — Replace `$target` middleware with `$name`. * `Rack::init($middleware = array())` — Can optionally be used as a simpler way to start Rack, as it takes an array of strings representing the stack classes. It also starts output buffering, so anything echoed within a stack class, will not be output till after Rack has output it's headers. Is also automatically called to start output buffering if needed the first time you call `Rack::add()`, `Rack::insert_before()`, or `Rack::insert_after()`. * `Rack::not_found()` — A shortcut method you can use when you want to return a 404 Not Found error status/page. It simply returns `array(404, array("Content-Type" => "text/html"), "Not Found")`. * `Rack::run()` — Initiate and execute the Rack stack. diff --git a/lib/rack.php b/lib/rack.php index 15bde0c..9eaa716 100644 --- a/lib/rack.php +++ b/lib/rack.php @@ -105,6 +105,28 @@ class Rack { } + public static function swap ($target, $name, $file = null) { + if ( !self::$constructed ) { + if ( array_key_exists($target, self::$middleware) ) { + $keys = array_keys(self::$middleware); + $length = count($keys); + $middleware = array(); + for ( $i=0; $i < $length; $i++ ) { + if ( $keys[$i] == $target ) { + $middleware[$name] = true; + } else { + $middleware[$keys[$i]] =& self::$middleware[$keys[$i]]; + } + } + self::$middleware = $middleware; + self::require_file($file); + return false; + } + } + return false; + } + + public static function not_found () { return array(404, array("Content-Type" => "text/html"), "Not Found"); }