mirror of
https://github.com/flarum/core.git
synced 2025-08-06 08:27:42 +02:00
- Stop trying to implement Laravel's Application contract, which has no value for us. - Stop inheriting from the Container, injecting one works equally well and does not clutter up the interfaces. - Inject the Paths collection instead of unwrapping it again, for better encapsulation. This brings us one step closer toward upgrading our Laravel components (#2055), because we no longer need to adopt the changes to the Application contract.
81 lines
2.1 KiB
PHP
81 lines
2.1 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of Flarum.
|
|
*
|
|
* For detailed copyright and license information, please view the
|
|
* LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Flarum\Http;
|
|
|
|
use Flarum\Foundation\SiteInterface;
|
|
use Laminas\Diactoros\Response;
|
|
use Laminas\Diactoros\ServerRequest;
|
|
use Laminas\Diactoros\ServerRequestFactory;
|
|
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
|
|
use Laminas\HttpHandlerRunner\RequestHandlerRunner;
|
|
use Laminas\Stratigility\Middleware\ErrorResponseGenerator;
|
|
use Throwable;
|
|
|
|
class Server
|
|
{
|
|
private $site;
|
|
|
|
public function __construct(SiteInterface $site)
|
|
{
|
|
$this->site = $site;
|
|
}
|
|
|
|
public function listen()
|
|
{
|
|
$runner = new RequestHandlerRunner(
|
|
$this->safelyBootAndGetHandler(),
|
|
new SapiEmitter,
|
|
[ServerRequestFactory::class, 'fromGlobals'],
|
|
function (Throwable $e) {
|
|
$generator = new ErrorResponseGenerator;
|
|
|
|
return $generator($e, new ServerRequest, new Response);
|
|
}
|
|
);
|
|
$runner->run();
|
|
}
|
|
|
|
/**
|
|
* Try to boot Flarum, and retrieve the app's HTTP request handler.
|
|
*
|
|
* We catch all exceptions happening during this process and format them to
|
|
* prevent exposure of sensitive information.
|
|
*
|
|
* @return \Psr\Http\Server\RequestHandlerInterface
|
|
*/
|
|
private function safelyBootAndGetHandler()
|
|
{
|
|
try {
|
|
return $this->site->bootApp()->getRequestHandler();
|
|
} catch (Throwable $e) {
|
|
exit($this->formatBootException($e));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Display the most relevant information about an early exception.
|
|
*/
|
|
private function formatBootException(Throwable $error): string
|
|
{
|
|
$message = $error->getMessage();
|
|
$file = $error->getFile();
|
|
$line = $error->getLine();
|
|
$type = get_class($error);
|
|
|
|
return <<<ERROR
|
|
Flarum encountered a boot error ($type)<br />
|
|
<b>$message</b><br />
|
|
thrown in <b>$file</b> on line <b>$line</b>
|
|
|
|
<pre>$error</pre>
|
|
ERROR;
|
|
}
|
|
}
|