From dd9a6eab7d1cc22308798b9dc9df89bd12ccc889 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Sessing=C3=B8?= Date: Mon, 29 Mar 2021 22:15:55 +0200 Subject: [PATCH] [FEATURE] Added class + method loading to IClassLoader. --- src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php | 12 ++++++++++++ .../SimpleRouter/ClassLoader/IClassLoader.php | 11 ++++++++++- src/Pecee/SimpleRouter/Route/Route.php | 4 ++-- .../Dummy/ClassLoader/CustomClassLoader.php | 14 +++++++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php b/src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php index 4c9a6b6..cb70e69 100644 --- a/src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php +++ b/src/Pecee/SimpleRouter/ClassLoader/ClassLoader.php @@ -22,6 +22,18 @@ class ClassLoader implements IClassLoader return new $class(); } + /** + * Called when loading class method + * @param object $class + * @param string $method + * @param array $parameters + * @return object + */ + public function loadClassMethod($class, string $method, array $parameters) + { + return call_user_func_array([$class, $method], array_values($parameters)); + } + /** * Load closure * diff --git a/src/Pecee/SimpleRouter/ClassLoader/IClassLoader.php b/src/Pecee/SimpleRouter/ClassLoader/IClassLoader.php index 8eb8cd1..2ac88bd 100644 --- a/src/Pecee/SimpleRouter/ClassLoader/IClassLoader.php +++ b/src/Pecee/SimpleRouter/ClassLoader/IClassLoader.php @@ -12,6 +12,15 @@ interface IClassLoader */ public function loadClass(string $class); + /** + * Called when loading class method + * @param object $class + * @param string $method + * @param array $parameters + * @return object + */ + public function loadClassMethod($class, string $method, array $parameters); + /** * Called when loading method * @@ -21,4 +30,4 @@ interface IClassLoader */ public function loadClosure(Callable $closure, array $parameters); -} +} \ No newline at end of file diff --git a/src/Pecee/SimpleRouter/Route/Route.php b/src/Pecee/SimpleRouter/Route/Route.php index 247e054..0d300ae 100644 --- a/src/Pecee/SimpleRouter/Route/Route.php +++ b/src/Pecee/SimpleRouter/Route/Route.php @@ -97,9 +97,9 @@ abstract class Route implements IRoute throw new ClassNotFoundHttpException($className, $method, sprintf('Method "%s" does not exist in class "%s"', $method, $className), 404, null); } - $router->debug('Executing callback'); + $router->debug('Executing callback %s -> %s', $className, $method); - return call_user_func_array([$class, $method], $parameters); + return $router->getClassLoader()->loadClassMethod($class, $method, $parameters); } protected function parseParameters($route, $url, $parameterRegex = null): ?array diff --git a/tests/Pecee/SimpleRouter/Dummy/ClassLoader/CustomClassLoader.php b/tests/Pecee/SimpleRouter/Dummy/ClassLoader/CustomClassLoader.php index 17bff54..ee5ebe6 100644 --- a/tests/Pecee/SimpleRouter/Dummy/ClassLoader/CustomClassLoader.php +++ b/tests/Pecee/SimpleRouter/Dummy/ClassLoader/CustomClassLoader.php @@ -7,8 +7,20 @@ class CustomClassLoader implements \Pecee\SimpleRouter\ClassLoader\IClassLoader return new DummyController(); } + /** + * Called when loading class method + * @param object $class + * @param string $method + * @param array $parameters + * @return object + */ + public function loadClassMethod($class, string $method, array $parameters) + { + return call_user_func_array([$class, $method], ['result' => true]); + } + public function loadClosure(callable $closure, array $parameters) { - return \call_user_func_array($closure, ['result' => true]); + return call_user_func_array($closure, ['result' => true]); } } \ No newline at end of file