From 6ee3e1bbaec319e89320ddd6c5a0ef2548abd17e Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Thu, 30 Mar 2023 18:29:17 +0000 Subject: [PATCH] - Forced parameters in URL to be filled in UrlExtension buildUrl() and disabled the custom exception for now... --- src/Extension/UrlExtension.php | 25 ++++++++++++++++++------- src/Picea.php | 10 +++++----- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/Extension/UrlExtension.php b/src/Extension/UrlExtension.php index 8d63f85..9ddc9eb 100644 --- a/src/Extension/UrlExtension.php +++ b/src/Extension/UrlExtension.php @@ -24,6 +24,9 @@ PATTERN; public array $tokens = [ "url" , "route", "asset", "slug" ]; + #[\Deprecated] + protected bool $enforceExistingArguments = true; + public function __construct(string $urlBase = "", string $assetToken = "") { $this->urlBase = trim($urlBase, "/"); $this->assetToken = $assetToken; @@ -216,26 +219,34 @@ PATTERN; $search = []; foreach($matches as $item) { - if (strpos($item[1], "=") !== false) { + $default = null; + + $variable = $item[1]; + + # Handles default + if (strpos($variable, "=") !== false) { list($variable, $default) = explode('=', $item[1]); } - elseif (strpos($item[1], ":") !== false) { + + # Handles type + if (strpos($variable, ":") !== false) { list($variable, ) = explode(':', $item[1]); } - else { - $variable = $item[1]; - } if ( array_key_exists($variable, $arguments) ) { $value = $arguments[ $variable ]; unset($arguments[ $variable ]); } else { - $value = $default ?? ""; + if ($default ?? false) { + $value = $default; + } + elseif ($this->enforceExistingArguments) { + throw new \RuntimeException(sprintf("Error while preparing route %s : could not match variable '%s' into given arguments ( %s )", $route, $variable, json_encode($arguments))); + } } $search[ $item[0] ] = $value; - } $route = str_replace(array_keys($search), array_values($search), $route); diff --git a/src/Picea.php b/src/Picea.php index 5879360..e7caa98 100644 --- a/src/Picea.php +++ b/src/Picea.php @@ -71,12 +71,12 @@ class Picea implements LanguageRegistration return call_user_func($object); } catch(\Throwable $ex) { - if (! $ex instanceof Exception\RenderHtmlException ) { - throw new Exception\RenderHtmlException($object, $this, "An error occurred trying to render HTML view `$viewPath` : " . $ex->getMessage(), 911, $ex); - } - else { + #if (! $ex instanceof Exception\RenderHtmlException ) { + # throw new Exception\RenderHtmlException($object, $this, "An error occurred trying to render HTML view `$viewPath` : " . $ex->getMessage(), 911, $ex); + #} + #else { throw $ex; - } + #} } exit();