Пример #1
0
 /**
  * Парсит из строки запроса данные, соответствующие заполнителям в маршруте, и устанавливает их
  * запросу в качестве атрибутов $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]);
     }
 }
Пример #2
0
 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;
 }