diff --git a/src/Router/Router.php b/src/Router/Router.php index a89c7fc..3e4da8e 100644 --- a/src/Router/Router.php +++ b/src/Router/Router.php @@ -75,18 +75,36 @@ class Router $url = $request->url(); $method = $request->method(); - if (array_key_exists($url, self::$routes[$method])) { - $controller = self::$routes[$method][$url]['controller']; - $action = self::$routes[$method][$url]['action']; + try { + if (array_key_exists($url, self::$routes[$method])) { + $controllerName = self::$routes[$method][$url]['controller']; + $actionName = self::$routes[$method][$url]['action']; - $controller = new $controller($request); - $response = $controller->$action(); + // Check for controller existence + if (!class_exists($controllerName)) { + throw new Exception(sprintf("Controller '%s' missing", $controllerName)); + } - if ($response instanceof Render) { - $response->render(); + // Create controller object + $controller = new $controllerName($request); + + // Check for method on controller + if (!method_exists($controller, $actionName)) { + throw new Exception(sprintf("Method '%s' not found on '%s'", $actionName, $controllerName)); + } + + // Build response object of action + $response = $controller->$actionName(); + + // Render action + if ($response instanceof Render) { + $response->render(); + } + } else { + throw new Exception(sprintf("No route found for: %s", $url)); } - } else { - Exceptions::catchOne(new Exception("No route found for: $url")); + } catch (Exception $e) { + Exceptions::catchOne($e); } } } \ No newline at end of file