public function run() { /** * @var $matcher Matcher * @var $request ServerRequest */ $matcher = $this->services->get('route.matcher'); $request = $this->services->get('request'); $route = $matcher->match($request); foreach ($route->attributes as $key => $val) { $request = $request->withAttribute($key, $val); } // Reset the service since the Zend request class is f*****g immutable $this->services->set('request', $request); $handler = $route->handler; /** * @var AbstractController */ $controller = $this->di->newInstance('Samsara\\Eden\\Controller\\' . $handler['controller']); $controller->setRequest($request); $content = call_user_func([$controller, $handler['action']]); if (!$content instanceof Response) { /** * @var Logger */ $logger = $this->services->get('logger'); $logger->addError($handler['controller'] . '::' . $handler['action'] . ' did not return a Response class.'); throw new ApplicationException('Eden expected controller ' . $handler['controller'] . ' with action ' . $handler['action'] . ' to return an instance of Samsara\\Eden\\Kernel\\ZendExtend\\Response, but something else was returned instead.'); } }
public function setDI(DI $di, Services $services) { /* Injections applied to all Controllers */ if ($handle = opendir(realpath(__DIR__) . '/Controller')) { while (false !== ($entry = readdir($handle))) { if ($entry != '.' && $entry != '..') { $controllerNamespace = 'Samsara\\Eden\\Controller\\' . str_replace('.php', '', $entry); // Give all Controllers the setter injection for the service container, payload, request & response $di->setters[$controllerNamespace]['setServiceContainer'] = $services; $di->setters[$controllerNamespace]['setPayload'] = $services->lazyGet('payload.factory'); $di->setters[$controllerNamespace]['setRequest'] = $services->lazyGet('request'); $di->setters[$controllerNamespace]['setResponse'] = $services->lazyGet('response'); } } } /* Injections applied to all Agents */ if ($handle = opendir(realpath(__DIR__) . '/Agent')) { while (false !== ($entry = readdir($handle))) { if ($entry != '.' && $entry != '..') { $agentNamespace = 'Samsara\\Eden\\Agent\\' . str_replace('.php', '', $entry); // Give all Agents a new Payload factory $di->setters[$agentNamespace]['setPayload'] = $services->lazyGet('payload.factory'); } } } $di->types['Samsara\\Eden\\Kernel\\AuraExtend\\DI'] = $di; $di->types['Samsara\\Eden\\Kernel\\AuraExtend\\Services'] = $services; $di->types['Samsara\\Eden\\Kernel\\Kernel'] = $this; $di->types['Samsara\\Eden\\Kernel\\Config'] = $this->config; $di->types['Samsara\\Eden\\Provider\\CryptoProvider'] = $di->lazyNew('Samsara\\Eden\\Provider\\CryptoProvider'); return $this; }