Current Path : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/main/include/ |
Current File : /var/www/www-root/data/www/monolith-realty.ru/bitrix/modules/main/include/routing_index.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2020 Bitrix */ use Bitrix\Main; use Bitrix\Main\Context; use Bitrix\Main\Engine\Action; use Bitrix\Main\Engine\AutoWire\Parameter; use Bitrix\Main\Engine\Contract\RoutableAction; use Bitrix\Main\Engine\Response\Json; use Bitrix\Main\Loader; use Bitrix\Main\Routing\CompileCache; use Bitrix\Main\Routing\Controllers\PublicPageController; use Bitrix\Main\Routing\Router; use Bitrix\Main\Routing\RoutingConfigurator; use Bitrix\Main\SystemException; require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/start.php"); $application = Main\Application::getInstance(); $application->initializeExtendedKernel(array( "get" => $_GET, "post" => $_POST, "files" => $_FILES, "cookie" => $_COOKIE, "server" => $_SERVER, "env" => $_ENV )); $router = $application->getRouter(); // match request $request = Context::getCurrent()->getRequest(); $route = $router->match($request); if ($route !== null) { $application->setCurrentRoute($route); // copy route parameters to the request if ($route->getParametersValues()) { foreach ($route->getParametersValues()->getValues() as $name => $value) { $_GET[$name] = $value; $_REQUEST[$name] = $value; } } $_SERVER["REAL_FILE_PATH"] = '/bitrix/routing_index.php'; $controller = $route->getController(); if ($controller instanceof PublicPageController) { include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/virtual_io.php"); $io = CBXVirtualIo::GetInstance(); $_SERVER["REAL_FILE_PATH"] = $controller->getPath(); include_once($io->GetPhysicalName($_SERVER['DOCUMENT_ROOT'].$controller->getPath())); die; } elseif ($controller instanceof \Closure) { $binder = Main\Engine\AutoWire\Binder::buildForFunction($controller); // pass current route $binder->appendAutoWiredParameter(new Parameter( Main\Routing\Route::class, fn () => $route )); // pass request $binder->appendAutoWiredParameter(new Parameter( Main\HttpRequest::class, fn () => Context::getCurrent()->getRequest() )); // pass named parameters $binder->setSourcesParametersToMap([ $route->getParametersValues()->getValues() ]); // init kernel require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); // call $result = $binder->invoke(); // send response if ($result !== null) { if ($result instanceof Main\HttpResponse) { // ready response $response = $result; } elseif (is_array($result)) { // json $response = new Json($result); } else { // string $response = new Main\HttpResponse; $response->setContent($result); } $application->getContext()->setResponse($response); $response->send(); } // terminate app $application->terminate(0); } elseif (is_array($controller)) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); // classic controller [$controllerClass, $actionName] = $controller; Loader::requireClass($controllerClass); if (is_subclass_of($controllerClass, Main\Engine\Controller::class)) { if (substr($actionName, -6) === 'Action') { $actionName = substr($actionName, 0, -6); } /** @var Main\HttpApplication $app */ $app = Main\Application::getInstance(); $app->runController($controllerClass, $actionName); } } elseif (is_string($controller)) { require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); // actually action could be attached to a few controllers // but what if action was made for the one controller only // then it could be used in routing $actionClass = $controller; Loader::requireClass($actionClass); if (is_subclass_of($controller, Action::class)) { if (is_subclass_of($actionClass, RoutableAction::class)) { /** @var RoutableAction $actionClass */ $controllerClass = $actionClass::getControllerClass(); $actionName = $actionClass::getDefaultName(); /** @var Main\HttpApplication $app */ $app = Main\Application::getInstance(); $app->runController($controllerClass, $actionName); } else { throw new SystemException(sprintf( 'Action `%s` should implement %s interface for being called in routing', $actionClass, RoutableAction::class )); } } } throw new SystemException(sprintf( 'Unknown controller `%s`', $controller )); } require_once __DIR__.'/urlrewrite.php';