Skip to content

Instantly share code, notes, and snippets.

@sasezaki
Created June 22, 2013 15:39
Show Gist options
  • Select an option

  • Save sasezaki/5841312 to your computer and use it in GitHub Desktop.

Select an option

Save sasezaki/5841312 to your computer and use it in GitHub Desktop.
router proposal for 5.5.0 or over
<?php
use \SplObjectStorage;
use Zend\Http\PhpEnvironment\Request;
use Zend\Http\PhpEnvironment\Response;
class Dispatcher
{
private $router;
public function __construct(Router $router)
{
$this->router = $router;
}
public function dispatch(Request $request, Response $response)
{
foreach ($this->router as $routeMatcher => $action) {
if ($routeMatcher($request)) {
return $action($response);
}
}
}
}
class Router extends SplObjectStorage
{
public function attach($object, $data = null){
parent::attach($object, $data);
return $this;
}
public function current()
{
return $this[$this->key()];
}
public function key()
{
return parent::current();
}
}
(new Dispatcher((new Router)
->attach(function(Request $request) {
if ($request->getUri()->getPath() === '/hello') {
return true;
}
return false;
}, function (Response $response) {
$response->setContent('hello world!');
return $response;
})
->attach(function(Request $request){
return true;
}, function (Response $response) {
$response->setContent('hello world2!');
return $response;
}))
)->dispatch(new Request, new Response)->send();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment