/** * @param array &$Response объект ответа * * @return string контент клиенту */ function toString(array &$Response) { $Application =& ServiceManager\get(getServiceManager($Response), 'Application'); switch (Application\getMode($Application)) { case Application\MODE_CLI: return toStringCli($Response); break; case Application\MODE_WEB: return toStringWeb($Response); break; default: trigger_error('Неизвестный режим запуска', E_USER_ERROR); } }
/** * Определяет роутинг по запросу * * @param array &$Router объект роута */ function match(array &$Router) { $Request =& getRequest($Router); switch (Application\getMode(getApplication($Router))) { case Application\MODE_CLI: // Запрос в cli-режиме if (Request\getArgc($Request) < 3) { trigger_error('Отсутствует имя скрипта', E_USER_ERROR); } $Router[FIELD_ROUTE_NAME] = 'script'; setControllerName($Router, ucfirst(Request\getArgv($Request)[1])); setActionName($Router, 'run'); break; case Application\MODE_WEB: // Запрос в web-режиме $documentUri = Request\getDocumentUri($Request); $matches = explode('/', trim(strtolower($documentUri), '/')); $count = count($matches); if ($count != 1 && $count != 2) { // TODO роутинг на страницу с ошибкой trigger_error('TODO', E_USER_ERROR); } $pattern = '/' . $matches[0]; $found = false; // Проходим по списку роутов и матчим подходящий foreach (getConfig($Router)[CONFIGURATION_WEB] as $name => $data) { if ($data[CONFIGURATION_PATTERN] === $pattern) { setControllerName($Router, $data[CONFIGURATION_CONTROLLER]); setActionName($Router, $count == 1 ? $data[CONFIGURATION_DEFAULT_ACTION] : $matches[1]); $Router[FIELD_ROUTE_NAME] = $name; $found = true; break; } } if (!$found) { header('HTTP/1.0 404 Not Found'); exit; } break; } }