/** * Process request. * * @param array $languageList * @param array $packageList * @param array $routeClassList * @param null|string $url * * @return Response */ public function run(array $languageList, array $packageList, array $routeClassList, $url = null) : Response { $request = new Request($languageList, $packageList, $url); $this->packageRoot .= $request->package() . '/'; /** * Process request. */ if (isset($routeClassList[$request->package()])) { /** * Custom routing. */ /** * Path to router class. */ $path = $this->packageRoot . $routeClassList[$request->package()] . '.php'; if (file_exists($path)) { require $path; /** * Name of router class. */ $route = $request->package() . '\\' . $routeClassList[$request->package()]; /** * @var IRoute $route */ $route = new $route(); $response = $route->getResponse($this->packageRoot, $request); if (null !== $response) { return $response; } } else { throw new \RuntimeException(sprintf('The file "%s" does not exist', $path)); } } $response = (new DefaultRoute())->getResponse($this->packageRoot, $request); if (null !== $response) { return $response; } /** * If not found. */ $response = new Response(); $response->headerStatus(404); $content = '404 Not Found'; if (file_exists($this->packageRoot . '/view/404.html.php')) { $content = (new Native($this->packageRoot))->getContent('404.html.php'); } $response->setContent($content); return $response; }
public function testRequestMakeUrl() { $_SERVER['HTTP_HOST'] = 'domain.com'; $request = new Request(); $this->assertEquals('/', $request->makeUrl()); $this->assertEquals('/foo/bar', $request->makeUrl('foo/bar////')); $this->assertEquals('/foo/bar', $request->makeUrl('//foo/bar////')); $this->assertEquals('http://domain.com/', $request->makeUrl('', true)); $this->assertEquals('http://domain.com/blog', $request->makeUrl('blog', true)); $this->assertEquals('http://domain.com/foo/bar', $request->makeUrl('foo/bar////', true)); $this->assertEquals('http://domain.com/foo/bar', $request->makeUrl('//foo/bar////', true)); $request = new Request(['en', 'ru'], [], 'en'); $this->assertEquals('/', $request->makeUrl('/')); $this->assertEquals('/foo/bar', $request->makeUrl('/foo/bar')); $this->assertEquals('http://domain.com/', $request->makeUrl('/', true)); $this->assertEquals('http://domain.com/foo/bar', $request->makeUrl('/foo/bar', true)); $request = new Request(['en', 'ru'], [], 'ru'); $this->assertEquals('/ru', $request->makeUrl('/')); $this->assertEquals('/ru/foo/bar', $request->makeUrl('/foo/bar')); $this->assertEquals('http://domain.com/ru', $request->makeUrl('/', true)); $this->assertEquals('http://domain.com/ru/foo/bar', $request->makeUrl('/foo/bar', true)); $request = new Request(['en', 'ru'], ['Manage'], '/en/manage'); $this->assertEquals('/manage', $request->makeUrl('/')); $this->assertEquals('/manage/foo/bar', $request->makeUrl('/foo/bar')); $this->assertEquals('http://domain.com/manage', $request->makeUrl('/', true)); $this->assertEquals('http://domain.com/manage/foo/bar', $request->makeUrl('/foo/bar', true)); $request = new Request(['en', 'ru'], ['Manage'], 'ru/manage//'); $this->assertEquals('/ru/manage', $request->makeUrl('/')); $this->assertEquals('/ru/manage/foo/bar', $request->makeUrl('/foo/bar')); $this->assertEquals('http://domain.com/ru/manage', $request->makeUrl('/', true)); $this->assertEquals('http://domain.com/ru/manage/foo/bar', $request->makeUrl('/foo/bar', true)); $request = new Request(['en', 'ru'], ['Manage'], 'app.dev.php/en/manage'); $this->assertEquals('/app.dev.php/manage', $request->makeUrl('/')); $this->assertEquals('/app.dev.php/manage/foo/bar', $request->makeUrl('/foo/bar')); $this->assertEquals('http://domain.com/app.dev.php/manage', $request->makeUrl('/', true)); $this->assertEquals('http://domain.com/app.dev.php/manage/foo/bar', $request->makeUrl('/foo/bar', true)); }