Boot Flarum app in Server classes

This is in preparation for fixing #1421 - it allows us to
encapsulate the exception handling in the server classes, so that
we can keep the skeleton (flarum/flarum) lean.
This commit is contained in:
Franz Liedke 2018-09-21 23:30:14 +02:00
parent 5fa9e1a8a2
commit d35532b744
2 changed files with 14 additions and 9 deletions

View File

@ -13,23 +13,26 @@ namespace Flarum\Console;
use Flarum\Console\Event\Configuring; use Flarum\Console\Event\Configuring;
use Flarum\Foundation\Application; use Flarum\Foundation\Application;
use Flarum\Foundation\SiteInterface;
use Illuminate\Contracts\Events\Dispatcher; use Illuminate\Contracts\Events\Dispatcher;
use Symfony\Component\Console\Application as ConsoleApplication; use Symfony\Component\Console\Application as ConsoleApplication;
class Server class Server
{ {
protected $commands; private $site;
public function __construct(array $commands) public function __construct(SiteInterface $site)
{ {
$this->commands = $commands; $this->site = $site;
} }
public function listen() public function listen()
{ {
$app = $this->site->bootApp();
$console = new ConsoleApplication('Flarum', Application::VERSION); $console = new ConsoleApplication('Flarum', Application::VERSION);
foreach ($this->commands as $command) { foreach ($app->getConsoleCommands() as $command) {
$console->add($command); $console->add($command);
} }

View File

@ -11,7 +11,7 @@
namespace Flarum\Http; namespace Flarum\Http;
use Psr\Http\Server\RequestHandlerInterface; use Flarum\Foundation\SiteInterface;
use Throwable; use Throwable;
use Zend\Diactoros\Response; use Zend\Diactoros\Response;
use Zend\Diactoros\ServerRequest; use Zend\Diactoros\ServerRequest;
@ -22,17 +22,19 @@ use Zend\Stratigility\Middleware\ErrorResponseGenerator;
class Server class Server
{ {
protected $requestHandler; private $site;
public function __construct(RequestHandlerInterface $requestHandler) public function __construct(SiteInterface $site)
{ {
$this->requestHandler = $requestHandler; $this->site = $site;
} }
public function listen() public function listen()
{ {
$app = $this->site->bootApp();
$runner = new RequestHandlerRunner( $runner = new RequestHandlerRunner(
$this->requestHandler, $app->getRequestHandler(),
new SapiEmitter, new SapiEmitter,
[ServerRequestFactory::class, 'fromGlobals'], [ServerRequestFactory::class, 'fromGlobals'],
function (Throwable $e) { function (Throwable $e) {