Created
November 20, 2015 22:22
-
-
Save Mikulas/1e6b0bc3297fdc4a2000 to your computer and use it in GitHub Desktop.
Example Nette Framework bridge kernel connection to PHPFastCGI fast cgi FastCGIDaemon daemon
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\FastCGI; | |
use App\Services\RouterFactory; | |
use Kdyby; | |
use Nette\Application\Application; | |
use Nette\Application\IPresenterFactory; | |
use Nette\Application\IRouter; | |
use Nette\Application\Routers\RouteList; | |
use Nette\Http; | |
use PHPFastCGI\FastCGIDaemon\Http\RequestInterface; | |
use PHPFastCGI\FastCGIDaemon\KernelInterface; | |
use Psr\Http\Message\ResponseInterface; | |
use Tracy\Debugger; | |
use Zend\Diactoros\Response\HtmlResponse; | |
/** | |
* Does not support nette error presenter, redirects and forwards | |
*/ | |
class Kernel implements KernelInterface | |
{ | |
/** @var IPresenterFactory */ | |
private $presenterFactory; | |
/** @var IRouter */ | |
private $router; | |
public function __construct(IPresenterFactory $presenterFactory, IRouter $router) | |
{ | |
$this->presenterFactory = $presenterFactory; | |
$this->router = $router; | |
// prevent Nette\Application\Routers\CliRouter from matching | |
$_SERVER['console_argv'] = $_SERVER['argv']; | |
$_SERVER['console_argc'] = $_SERVER['argc']; | |
unset($_SERVER['argv'], $_SERVER['argc']); | |
// prevent Kdyby\Console\CliRouter from matching | |
if ($router instanceof RouteList) { | |
foreach ($router->getIterator() as $innerRouter) { | |
if ($innerRouter instanceof Kdyby\Console\CliRouter) { | |
$innerRouter->allowedMethods = []; | |
break; | |
} | |
} | |
} | |
} | |
/** | |
* Handles a request and returns a response. | |
* | |
* @param RequestInterface $request FastCGI HTTP request object | |
* | |
* @return ResponseInterface HTTP response message | |
*/ | |
public function handleRequest(RequestInterface $request) | |
{ | |
$serverRequest = $request->getServerRequest(); | |
$url = new Http\UrlScript((string) $serverRequest->getUri()); | |
$netteHttpRequest = new Http\Request( | |
$url, NULL, | |
$serverRequest->getParsedBody(), | |
$serverRequest->getUploadedFiles(), | |
$serverRequest->getCookieParams(), | |
$serverRequest->getHeaders(), | |
$serverRequest->getMethod() | |
// TODO | |
); | |
$netteHttpResponse = new Http\Response(); | |
$netteAppRequest = $this->router->match($netteHttpRequest); | |
$app = new Application($this->presenterFactory, $this->router, $netteHttpRequest, $netteHttpResponse); | |
ob_start(); | |
$app->processRequest($netteAppRequest); | |
$output = ob_get_clean(); | |
return new HtmlResponse($output, $netteHttpResponse->getCode(), $netteHttpResponse->getHeaders()); | |
} | |
private function debug() | |
{ | |
file_put_contents('/dev/ttys004', Debugger::dump(func_get_args(), TRUE)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment