added public swap method to replace a middleware

stack item
This commit is contained in:
2010-01-13 15:32:38 +02:00
parent 04716b0a58
commit 2eff641a75
2 changed files with 23 additions and 0 deletions

View File

@@ -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.

View File

@@ -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");
}