1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
<?php
namespace ICanBoogie\Binding\HTTP;
use ICanBoogie\Application;
use ICanBoogie\HTTP\Dispatcher;
use ICanBoogie\HTTP\RequestDispatcher;
class ProvideDispatcher extends \ICanBoogie\HTTP\ProvideDispatcher
{
private $app;
public function __construct(Application $app)
{
$this->app = $app;
}
protected function create()
{
$config = $this->app->configs['http_dispatchers'];
$dispatcher = $config ? $this->resolve_dispatchers($config) : [];
return new RequestDispatcher($dispatcher);
}
protected function resolve_dispatchers(array $config)
{
$dispatchers = [];
foreach ($config as $dispatcher_id => $dispatcher_config)
{
$constructor = $this->resolve_constructor($dispatcher_config[DispatcherConfig::CONSTRUCTOR]);
$dispatchers[$dispatcher_id] = $constructor($dispatcher_config);
}
return $dispatchers;
}
protected function resolve_constructor($constructor)
{
if (class_exists($constructor))
{
return new $constructor($this->app);
}
return function($dispatcher_config) use ($constructor) {
return call_user_func($constructor, $dispatcher_config);
};
}
}