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 setServices(Services $services) { $request = ServerRequestFactory::fromGlobals(); $response = new Response(); $templater = new Engine($this->config->get('template.location')); $logger = new Logger('app'); $logHandler = new StreamHandler($this->config->getSys('log.location'), $this->logLevel[$this->config->get('log.level')]); $logger->pushHandler($logHandler); $emConfig = Setup::createAnnotationMetadataConfiguration([$this->config->getSys('basedir')], false); $emConn = ['driver' => 'pdo_pgsql']; $em = EntityManager::create($emConn, $emConfig); $services->set('payload.factory', new PayloadFactory()); $services->set('request', $request); $services->set('response', $response); $services->set('logger', $logger); $services->set('kernel', $this); $services->set('template.engine', $templater); $services->set('entityManager', $em); return $this; }