From 818df8727194b1a33545dda141d221d500ee1151 Mon Sep 17 00:00:00 2001 From: Greg Bowler Date: Wed, 1 Nov 2023 23:01:39 +0000 Subject: [PATCH] wip: component binder --- src/Logic/LogicExecutor.php | 2 +- src/Middleware/DefaultServiceLoader.php | 47 +++-------------------- src/Middleware/RequestHandler.php | 51 +++++++++++++++++++++---- 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/src/Logic/LogicExecutor.php b/src/Logic/LogicExecutor.php index 3a9d9f55..27fb3c73 100644 --- a/src/Logic/LogicExecutor.php +++ b/src/Logic/LogicExecutor.php @@ -20,7 +20,7 @@ public function __construct( } /** @return Generator filename::function() */ - public function invoke(string $name, mixed...$extraArgs):Generator { + public function invoke(string $name, array $extraArgs = []):Generator { foreach($this->assembly as $file) { $nsProject = (string)(new LogicProjectNamespace( $file, diff --git a/src/Middleware/DefaultServiceLoader.php b/src/Middleware/DefaultServiceLoader.php index ce6672de..6020d19f 100644 --- a/src/Middleware/DefaultServiceLoader.php +++ b/src/Middleware/DefaultServiceLoader.php @@ -26,7 +26,7 @@ class DefaultServiceLoader { public function __construct( protected Config $config, protected Container $container - ) {} + ) { } public function loadResponseHeaders():ResponseHeaders { $response = $this->container->get(Response::class); @@ -66,26 +66,11 @@ public function loadPlaceholderBinder():PlaceholderBinder { } public function loadElementBinder():ElementBinder { - $elementBinder = new ElementBinder(); - $elementBinder->setDependencies( - $this->container->get(HTMLAttributeBinder::class), - $this->container->get(HTMLAttributeCollection::class), - $this->container->get(PlaceholderBinder::class), - ); - return $elementBinder; + return new ElementBinder(); } public function loadTableBinder():TableBinder { - $tableBinder = new TableBinder(); - $tableBinder->setDependencies( - $this->container->get(ListBinder::class), - $this->container->get(ListElementCollection::class), - $this->container->get(ElementBinder::class), - $this->container->get(HTMLAttributeBinder::class), - $this->container->get(HTMLAttributeCollection::class), - $this->container->get(PlaceholderBinder::class), - ); - return $tableBinder; + return new TableBinder(); } public function loadListElementCollection():ListElementCollection { @@ -95,34 +80,12 @@ public function loadListElementCollection():ListElementCollection { } public function loadListBinder():ListBinder { - $listBinder = new ListBinder(); - $listBinder->setDependencies( - $this->container->get(ElementBinder::class), - $this->container->get(ListElementCollection::class), - $this->container->get(BindableCache::class), - $this->container->get(TableBinder::class), - ); - return $listBinder; + return new ListBinder(); } public function loadBinder():Binder { $document = $this->container->get(Document::class); - $binder = new DocumentBinder($document); - $binder->setDependencies( - $this->container->get(ElementBinder::class), - $this->container->get(PlaceholderBinder::class), - $this->container->get(TableBinder::class), - $this->container->get(ListBinder::class), - $this->container->get(ListElementCollection::class), - $this->container->get(BindableCache::class), - ); - return $binder; - } - - public function loadDocumentBinder():DocumentBinder { - /** @var DocumentBinder $documentBinder */ - $documentBinder = $this->loadBinder(); - return $documentBinder; + return new DocumentBinder($document); } public function loadRequestUri():Uri { diff --git a/src/Middleware/RequestHandler.php b/src/Middleware/RequestHandler.php index 26bce63f..5f420916 100644 --- a/src/Middleware/RequestHandler.php +++ b/src/Middleware/RequestHandler.php @@ -13,6 +13,8 @@ use Gt\DomTemplate\ComponentExpander; use Gt\DomTemplate\DocumentBinder; use Gt\DomTemplate\ElementBinder; +use Gt\DomTemplate\HTMLAttributeBinder; +use Gt\DomTemplate\HTMLAttributeCollection; use Gt\DomTemplate\ListBinder; use Gt\DomTemplate\ListElementCollection; use Gt\DomTemplate\PartialContent; @@ -126,12 +128,13 @@ protected function completeRequestHandling( $this->handleSession(); } + $this->handleProtectedGlobals(); + if($this->viewModel instanceof HTMLDocument) { $this->handleHTMLDocumentViewModel(); // $this->handleCsrf($request); } - $this->handleProtectedGlobals(); $this->handleLogicExecution($this->logicAssembly); // TODO: Why is this in the handle function? @@ -181,6 +184,38 @@ protected function handleRouting(ServerRequestInterface $request) { } protected function handleHTMLDocumentViewModel():void { + $this->serviceContainer->get(HTMLAttributeBinder::class)->setDependencies( + $this->serviceContainer->get(ListBinder::class), + $this->serviceContainer->get(TableBinder::class), + ); + $this->serviceContainer->get(ElementBinder::class)->setDependencies( + $this->serviceContainer->get(HTMLAttributeBinder::class), + $this->serviceContainer->get(HTMLAttributeCollection::class), + $this->serviceContainer->get(PlaceholderBinder::class), + ); + $this->serviceContainer->get(TableBinder::class)->setDependencies( + $this->serviceContainer->get(ListBinder::class), + $this->serviceContainer->get(ListElementCollection::class), + $this->serviceContainer->get(ElementBinder::class), + $this->serviceContainer->get(HTMLAttributeBinder::class), + $this->serviceContainer->get(HTMLAttributeCollection::class), + $this->serviceContainer->get(PlaceholderBinder::class), + ); + $this->serviceContainer->get(ListBinder::class)->setDependencies( + $this->serviceContainer->get(ElementBinder::class), + $this->serviceContainer->get(ListElementCollection::class), + $this->serviceContainer->get(BindableCache::class), + $this->serviceContainer->get(TableBinder::class), + ); + $this->serviceContainer->get(Binder::class)->setDependencies( + $this->serviceContainer->get(ElementBinder::class), + $this->serviceContainer->get(PlaceholderBinder::class), + $this->serviceContainer->get(TableBinder::class), + $this->serviceContainer->get(ListBinder::class), + $this->serviceContainer->get(ListElementCollection::class), + $this->serviceContainer->get(BindableCache::class), + ); + try { $partial = new PartialContent(implode(DIRECTORY_SEPARATOR, [ getcwd(), @@ -198,9 +233,9 @@ protected function handleHTMLDocumentViewModel():void { $filePath .= ".php"; if(is_file($filePath)) { - $assembly = new Assembly(); - $assembly->add($filePath); - $this->handleLogicExecution($assembly, $componentElement); + $componentAssembly = new Assembly(); + $componentAssembly->add($filePath); + $this->handleLogicExecution($componentAssembly, $componentElement); } } } @@ -313,7 +348,7 @@ protected function handleProtectedGlobals():void { )); } - protected function handleLogicExecution(Assembly $logicAssembly, ?Element $componentElement = null):void { + protected function handleLogicExecution(Assembly $logicAssembly, ?Element $component = null):void { $logicExecutor = new LogicExecutor( $logicAssembly, $this->injector, @@ -321,7 +356,7 @@ protected function handleLogicExecution(Assembly $logicAssembly, ?Element $compo ); $extraArgs = []; - if($componentElement) { + if($component) { $binder = new ComponentBinder($this->viewModel); $binder->setDependencies( $this->serviceContainer->get(ElementBinder::class), @@ -331,7 +366,7 @@ protected function handleLogicExecution(Assembly $logicAssembly, ?Element $compo $this->serviceContainer->get(ListElementCollection::class), $this->serviceContainer->get(BindableCache::class), ); - $binder->setComponentBinderDependencies($componentElement); + $binder->setComponentBinderDependencies($component); $extraArgs[Binder::class] = $binder; } @@ -345,7 +380,7 @@ function(InputData $data)use($logicExecutor, $extraArgs) { $doName = "do_" . str_replace( "-", "_", - $data->getString("do") + $data->getString("do"), ); foreach($logicExecutor->invoke($doName, $extraArgs) as $file) {