From 478f927d6b473862c574618c7aeec4430d754b1f Mon Sep 17 00:00:00 2001 From: Richard Date: Wed, 12 Dec 2018 05:44:32 -0500 Subject: [PATCH 1/8] Remove sharing the request obj Request obj was passed to objects when it was not wanted which caused all sorts of random bugs --- ModuleJson.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ModuleJson.php b/ModuleJson.php index 0715687..855bfa7 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -72,13 +72,13 @@ private function getRoute($routeSettings, $route) { if (isset($routeSettings['model'])) { $this->dice->addRule('$Model', $routeSettings['model']); - $model = $this->dice->create('$Model', [], [$this->request]); + $model = $this->dice->create('$Model', []); } else if (isset($routeSettings['models'])) { $model = []; foreach ($routeSettings['models'] as $name => $diceRule) { $this->dice->addRule('$Model_' . $name, $diceRule); - $model[$name] = $this->dice->create('$Model_' . $name, [], [$this->request]); + $model[$name] = $this->dice->create('$Model_' . $name, []); } } else $model = null; From c6ba0937e017f936b24b293e1147b97b4a497b5f Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 13 Jan 2019 16:59:35 -0500 Subject: [PATCH 2/8] Allow instanceOf to be a dice rule class --- ModuleJson.php | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/ModuleJson.php b/ModuleJson.php index 855bfa7..a32254e 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -67,21 +67,30 @@ private function getRouteModuleFile($file) { else return false; } + private function getModel($settings, $name = '') { + if (class_exists($settings['instanceOf'])) { + $this->dice->addRule('$Model_' . $name, $settings); + $model = $this->dice->create('$Model_' . $name, [], []); + } + else { + $model = $this->dice->create($settings['instanceOf']); + } + return $model; + } + private function getRoute($routeSettings, $route) { $this->dice->addRule('$View', $routeSettings['view']); - if (isset($routeSettings['model'])) { - $this->dice->addRule('$Model', $routeSettings['model']); - $model = $this->dice->create('$Model', []); - } - else if (isset($routeSettings['models'])) { - $model = []; - foreach ($routeSettings['models'] as $name => $diceRule) { - $this->dice->addRule('$Model_' . $name, $diceRule); - $model[$name] = $this->dice->create('$Model_' . $name, []); - } - } - else $model = null; + if (isset($routeSettings['model'])) { + $model = $this->getModel($routeSettings['model']); + } + else if (isset($routeSettings['models'])) { + $model = []; + foreach ($routeSettings['models'] as $name => $diceRule) { + $model[$name] = $this->getModel($diceRule, $name); + } + } + else $model = null; if (isset($routeSettings['controller'])) { From cf2b7ab7a75438fb8016b245d9472704c56489a5 Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 8 Mar 2019 11:45:28 -0500 Subject: [PATCH 3/8] Fix bug with extend property --- ModuleJson.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ModuleJson.php b/ModuleJson.php index a32254e..d42f50a 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -58,8 +58,8 @@ private function getRouteModuleFile($file) { $config = json_decode(str_replace('"./', '"' . dirname($file) . '/', file_get_contents($file)), true); // Extend property - if (isset($route['extend'])) { - $extended = $this->getRouteModuleFile($directory . DIRECTORY_SEPARATOR . $route['extend']); + if (isset($config['extend'])) { + $extended = $this->getRouteModuleFile(dirname($file) . DIRECTORY_SEPARATOR . $config['extend']); $config = array_merge($extended, $config); } return $config; From ae948b48555984713fbb517e7681d8dfb5691fc6 Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 8 Mar 2019 12:08:21 -0500 Subject: [PATCH 4/8] Fix filepath bug in extend --- ModuleJson.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ModuleJson.php b/ModuleJson.php index d42f50a..112e6de 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -53,19 +53,19 @@ public function getConfig($route) { return $this->getRouteModuleFile($file); } - private function getRouteModuleFile($file) { - if (file_exists($file)) { - $config = json_decode(str_replace('"./', '"' . dirname($file) . '/', file_get_contents($file)), true); - - // Extend property - if (isset($config['extend'])) { - $extended = $this->getRouteModuleFile(dirname($file) . DIRECTORY_SEPARATOR . $config['extend']); - $config = array_merge($extended, $config); - } - return $config; - } - else return false; - } + private function getRouteModuleFile($file) { + if (file_exists($file)) { + $config = json_decode(str_replace('"./', '"' . dirname($file) . '/', file_get_contents($file)), true); + + // Extend property + if (isset($config['extend'])) { + $extended = $this->getRouteModuleFile($config['extend']); + $config = array_merge($extended, $config); + } + return $config; + } + else return false; + } private function getModel($settings, $name = '') { if (class_exists($settings['instanceOf'])) { From 73edddcb97a98906591683b36dd3271bc29ae3df Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 8 Mar 2019 22:47:27 -0500 Subject: [PATCH 5/8] Fix issues with extend --- ModuleJson.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ModuleJson.php b/ModuleJson.php index 112e6de..c810793 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -60,13 +60,20 @@ private function getRouteModuleFile($file) { // Extend property if (isset($config['extend'])) { $extended = $this->getRouteModuleFile($config['extend']); - $config = array_merge($extended, $config); + $config = $this->mergeConfig($config, $extended); } return $config; } else return false; } + private function mergeConfig($orig, $ext) { + foreach (['GET', 'POST', 'conditions'] as $index) { + if (isset($orig[$index]) || isset($ext[$index])) $orig[$index] = array_merge($ext[$index], $orig[$index] ?? []); + } + return $orig; + } + private function getModel($settings, $name = '') { if (class_exists($settings['instanceOf'])) { $this->dice->addRule('$Model_' . $name, $settings); From 52417ed28cf5fe761dfcf83b417a1684cf7bc17a Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 12 Apr 2019 10:53:49 -0400 Subject: [PATCH 6/8] Allow model being set by return of controller Allows immutable practices --- ModuleJson.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ModuleJson.php b/ModuleJson.php index c810793..41680f6 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -110,7 +110,9 @@ private function getRoute($routeSettings, $route) { $controllerRule['call'] = []; - $controllerRule['call'][] = [$action, $route]; + $controllerRule['call'][] = [$action, $route, function ($return) use (&$model) { + if (is_object($return)) $model = $return; + }]; $this->dice->addRule('$controller', $controllerRule); if (is_array($model)) { $controller = $this->dice->create('$Controller', [], array_merge(array_values($model), [$this->request])); From 049935717088720fbdb5b4616129e2c9edba3c7c Mon Sep 17 00:00:00 2001 From: Richard Date: Fri, 12 Apr 2019 11:25:47 -0400 Subject: [PATCH 7/8] Update to Dice 4.0 --- ModuleJson.php | 9 ++++----- composer.json | 3 ++- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ModuleJson.php b/ModuleJson.php index 41680f6..a2cfc7d 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -1,10 +1,9 @@ dice->addRule('$Model_' . $name, $settings); + $this->dice = $this->dice->addRule('$Model_' . $name, $settings); $model = $this->dice->create('$Model_' . $name, [], []); } else { @@ -86,7 +85,7 @@ private function getModel($settings, $name = '') { } private function getRoute($routeSettings, $route) { - $this->dice->addRule('$View', $routeSettings['view']); + $this->dice = $this->dice->addRule('$View', $routeSettings['view']); if (isset($routeSettings['model'])) { $model = $this->getModel($routeSettings['model']); @@ -113,7 +112,7 @@ private function getRoute($routeSettings, $route) { $controllerRule['call'][] = [$action, $route, function ($return) use (&$model) { if (is_object($return)) $model = $return; }]; - $this->dice->addRule('$controller', $controllerRule); + $this->dice = $this->dice->addRule('$controller', $controllerRule); if (is_array($model)) { $controller = $this->dice->create('$Controller', [], array_merge(array_values($model), [$this->request])); } diff --git a/composer.json b/composer.json index 12add76..9731a55 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,8 @@ ], "require": { "php": ">=5.5.0", - "level-2/router" : "dev-master" + "level-2/router" : "dev-master", + "level-2/dice" : "^4.0" }, "autoload": { "classmap": ["./"] From 86708c1a9e6e6fc81d6f9f07938c03400d082367 Mon Sep 17 00:00:00 2001 From: Richard Date: Mon, 13 Apr 2020 19:24:49 -0400 Subject: [PATCH 8/8] Fix regex issue Reqex was not strict enough before so it was matching too many things Anything that began with part of a module name would match --- ModuleJson.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ModuleJson.php b/ModuleJson.php index 0715687..010bc55 100755 --- a/ModuleJson.php +++ b/ModuleJson.php @@ -41,7 +41,7 @@ public function find(array $route) { private function getRouteDir($moduleName) { $files = glob($this->moduleDir . '/*'); - $match = preg_grep('/' . $this->moduleDir . '\/' . $moduleName . '/i', $files); + $match = preg_grep('/^' . $this->moduleDir . '\/' . $moduleName . '$/i', $files); return array_values($match)[0] ?? false; }