public function dispatch(Request $request, Response $response) { $controllerParam = $request->getParam('controller', 'Error'); $actionParam = $request->getParam('action', 'error404'); $controllerClass = 'Application\\Controller\\' . implode('', array_map('ucfirst', explode('-', $controllerParam))) . 'Controller'; $actionMethod = implode('', array_map('ucfirst', explode('-', $actionParam))) . 'Action'; $actionMethod = strtolower(substr($actionMethod, 0, 1)) . substr($actionMethod, 1); if (!class_exists($controllerClass, true)) { $controllerClass = 'Application\\Controller\\ErrorController'; $actionMethod = 'error404Action'; $request->setParams(array('action' => '404', 'controller' => 'error')); } /** @var $controller AbstractAction */ $controller = new $controllerClass($request, $response); $classMethods = get_class_methods($controller); if (!in_array($actionMethod, get_class_methods($controller))) { $controllerClass = 'Application\\Controller\\ErrorController'; $actionMethod = 'error404Action'; // controller => 'name', action => 'name', param => 'name' $request->setParams(array('action' => '404', 'controller' => 'error')); /** @var $controller AbstractAction */ $controller = new $controllerClass($request, $response); } if (in_array('preDispatch', $classMethods)) { $controller->preDispatch(); } if (!$controller->getBreakRun() && empty($forward)) { $actionResponse = $controller->{$actionMethod}(); $forward = $controller->getForward(); if (!empty($forward)) { $request->setParams($forward); $controller->removeForward(); return $this->dispatch($request, $response); } if (in_array('postDispatch', $classMethods)) { $controller->postDispatch(); } } // print_r($response); echo 123123; die; return $response; }