/** * Парсит из строки запроса данные, соответствующие заполнителям в маршруте, и устанавливает их * запросу в качестве атрибутов $request->attributes * * @param Request $request * @param Route $route */ public function initRequestAttributesByRoute(Request $request, Route $route) { if (!$route->isPathEquivalent($request->getPath())) { return; } $placeHolders = $route->getPathPlaceholders(); $requestPathComponents = explode('/', $request->getPath()); foreach ($placeHolders as $position => $name) { $request->setAttribute($name, $requestPathComponents[$position]); } }
private function executeRoute(Route $route, Request $request) { $controllerClass = $route->getControllerClass(); if (!class_exists($controllerClass)) { throw new SystemException('Controller "' . $controllerClass . '" does not exist'); } /** @var Controller $controller */ $controller = new $controllerClass(); $actionMethod = $route->getActionName() . 'Action'; if (!method_exists($controller, $actionMethod)) { throw new SystemException('Method "' . $controllerClass . '->' . $actionMethod . '() does not exist'); } // установить контроллеру входной запрос $controller->setRequest($request); // вызвать контроллер $response = $controller->{$actionMethod}(); // обработать ответ if (!$response instanceof Response) { $response = new Response($response); } return $response; }