From 838d9c5106bd0a858b85ab3cb044de0570e4f769 Mon Sep 17 00:00:00 2001 From: Daniel Klabbers Date: Mon, 28 Jun 2021 11:36:03 +0200 Subject: [PATCH] Allow easier extensibility of page document This allows extensions to: - mutate the json api document sent with php documents - override/interact with the Document Right now extensions need to replace the complete Frontend class in order to interact with the document. Let's abstract into ioc so that advanced devs can interact with it. --- src/Frontend/Frontend.php | 4 +++- src/Frontend/FrontendServiceProvider.php | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Frontend/Frontend.php b/src/Frontend/Frontend.php index 05a4e5405..3c81816f3 100644 --- a/src/Frontend/Frontend.php +++ b/src/Frontend/Frontend.php @@ -49,7 +49,9 @@ class Frontend { $forumDocument = $this->getForumDocument($request); - $document = new Document($this->view, $forumDocument, $request); + $responseDocument = resolve('flarum.frontend.document'); + + $document = $responseDocument($forumDocument, $request); $this->populate($document, $request); diff --git a/src/Frontend/FrontendServiceProvider.php b/src/Frontend/FrontendServiceProvider.php index cb91a5076..52c04c9d0 100644 --- a/src/Frontend/FrontendServiceProvider.php +++ b/src/Frontend/FrontendServiceProvider.php @@ -16,6 +16,8 @@ use Flarum\Http\UrlGenerator; use Flarum\Settings\SettingsRepositoryInterface; use Illuminate\Contracts\Container\Container; use Illuminate\Contracts\View\Factory as ViewFactory; +use Illuminate\View\Factory; +use Psr\Http\Message\ServerRequestInterface as Request; class FrontendServiceProvider extends AbstractServiceProvider { @@ -57,6 +59,16 @@ class FrontendServiceProvider extends AbstractServiceProvider return $frontend; }; }); + + $this->container->singleton('flarum.frontend.document', function (Container $container) { + return function (array $apiDocument, Request $request) use ($container){ + return new Document( + $container->make(Factory::class), + $apiDocument, + $request + ); + }; + }); } /**