Bitrix\Main\Application - uniqcle/Bitrix GitHub Wiki

use Bitrix\Main\Application, 
    Bitrix\Main\Context, 
    Bitrix\Main\Request, 
    Bitrix\Main\Server;

Bitrix\Main\Application

Приложение является базовой точкой входа (маршрутизатором) для обращения к глобальным сущностям ядра: соединение с источниками данных, управляемый кеш и т.п. Также приложение содержит глобальные данные, которые относятся к самому сайту и не зависят от конкретного хита. То есть, приложение является неизменяемой частью, не зависящей от конкретного хита.

$application = \Bitrix\Main\Application::getInstance(); //Объект приложения

$docRoot = \Bitrix\Main\Application::getDocumentRoot(); //Получить document_root
$connection = \Bitrix\Main\Application::getConnection();  //соединение с БД

Bitrix\Main\Context

При инициализации приложения создаётся контекст:

Контекст - это объект, отвечающий за конкретный хит. Он содержит запрос текущего хита, ответ ему, а также серверные параметры текущего хита. То есть это изменяемая часть, зависящая от текущего хита.

Чтобы получить контекст текущего хита нужно выполнить

$context = Application::getInstance()->getContext();
// Или более краткая форма:
$context = Context::getCurrent();

Контекст содержит много полезной информации о запросе, сервере, сайте, языке.

$request = $context->getRequest(); // объект Request
$siteId = $context->getSite();     // ID текущего сайта ("s1")
$langId = $context->getLanguage(); // ID текущего языка ("ru")

$server = $context->getServer();   // объект Server
$server->getDocumentRoot();        //Путь до корня сайта 
$server->getServerName();          //SERVER_NAME
$server->get('HTTP_X_REAL_IP');    //$_SERVER['HTTP_X_REAL_IP']

Bitrix\Main\Request

Объект запроса позволяет получить данные о текущем запросе: метод и протокол, запрошенный URL, переданные параметры и т.п.

$request = $context->getRequest();
// Или более краткая форма:
$request = Context::getCurrent()->getRequest();

Параметры запроса:

$value = $request->get("param");       // получение параметра GET или POST
$value = $request["param"];            // получение параметра GET или POST
$value = $request->getQuery("param");  // получение GET-параметра
$values = $request->getQueryList();    // получение списка GET-параметров
$value = $request->getPost("param");   // получение POST-параметра
$values = $request->getPostList();     // получение списка POST-параметров
$value = $request->getFile("param");   // получение загруженного файла
$values = $request->getFileList();     // получение списка загруженных файлов
$value = $request->getCookie("param"); // получение значения кука
$values = $request->getCookieList();   // получение списка кукисов

Метод и протокол запроса:

$method = $request->getRequestMethod(); // получение метода запроса
$flag = $request->isGet();              // true - GET-запрос, иначе false
$flag = $request->isPost();             // true - POST-запрос, иначе false
$flag = $request->isAjaxRequest();      // true - AJAX-запрос, иначе false
$flag = $request->isHttps();            // true - HTTPS-запрос, иначе false

Данные о запрошенной странице:

$flag = $request->isAdminSection();            // true - находимся в админке, иначе false
$requestUri = $request->getRequestUri();       // Запрошенный адрес (напр. "/catalog/category/?param=value") Аналог $APPLICATION->GetCurPageParam()
$requestPage = $request->getRequestedPage();   // Запрошенная страница (напр. "/catalog/category/index.php") Аналог $APPLICATION->GetCurPage()
$rDir  = $request->getRequestedPageDirectory();// Директория запрошенной страницы (напр. "/catalog/category") Аналог $APPLICATION->GetCurDir()

Пример:

<?php
$request = \Bitrix\Main\Application::getInstance()->getContext()->getRequest()->getQueryList();

echo $paramSort = $request->get('SORT_BY'); // Получение конкретного параметра
echo $paramTest = $request->get('TEST');
?>

Bitrix\Main\Server

Объект сервера позволяет получить информацию из суперглобального массива $_SERVER, а также некоторую другую информацию.

$server = $context->getServer();
// Или более краткая форма:
$server = Context::getCurrent()->getServer();
$server->get('HTTP_ACCEPT');// Любое значение из $_SERVER
$server->getDocumentRoot(); // DOCUMENT_ROOT
$server->getPersonalRoot(); // BX_PERSONAL_ROOT ("/bitrix")
$server->getHttpHost();     // HTTP_HOST 
$server->getServerName();   // SERVER_NAME 
$server->getServerAddr();   // SERVER_ADDR 
$server->getServerPort();   // SERVER_PORT 
$server->getRequestUri();   // REQUEST_URI 
$server->getRequestMethod();// REQUEST_METHOD 
$server->getPhpSelf();      // PHP_SELF 
$server->getScriptName();   // SCRIPT_NAME
$request->getRemoteAddress() //аналог $_SERVER["REMOTE_ADDR"]
$request->getUserAgent()     //аналог $_SERVER["HTTP_USER_AGENT"]

URI

use Bitrix\Main\Application,
    Bitrix\Main\Web\Uri;

$request = Application::getInstance()->getContext()->getRequest();
$uriString = $request->getRequestUri();

$uri = new Uri($uriString);                    // Получаем объект

$uri->deleteParams(array("SORT_BY"));          // Удаляем параметр
$uri->addParams(array("TESTING" => "111"));    // Добавляем параметр

$redirect = $uri->getUri();                   //Результирующую ссылку

 

// Аналог. TESTING - удаляет, SORT_BY - удаляет
echo $APPLICATION->GetCurPageParam("TESTING=123", array("SORT_BY"));

Deprecated

if (!empty($_REQUEST['name']) and !empty($_REQUEST['description'])) {
...

HTTP

use \Bitrix\Main\Application;
use \Bitrix\Main\Web\Uri;
use \Bitrix\Main\Web\HttpClient;

//URI
$uri = new Uri("http://username:[email protected]/some/path/?param1=value#comments");

$uri->getLocator();
$uri->getUri();
$uri->getHost();
$uri->getUser();
$uri->getPass();
$uri->getPath();
$uri->getPathQuery();
$uri->getPort();
$uri->getQuery();
$uri->getScheme();
$uri->deleteParams(array("param1"));
$uri->getUri();
$uri->addParams(array("param2" => "value"));
$uri->getUri();

//HTTP Client
$options = array(
    "redirect" => true,
    "redirectMax" => 5,
    "waitResponse" => true,
    "socketTimeout" => 30,
    "streamTimeout" => 60,
    "version" => HttpClient::HTTP_1_0, // HttpClient::HTTP_1_0 or HttpClient::HTTP_1_1
    "proxyHost" => "",
    "proxyPort" => "",
    "proxyUser" => "",
    "proxyPassword" => "",
    "compress" => false, // Accept-Encoding: gzip
    "charset" => "", //request body charset
    "disableSslVerification" => false,
);
$httpClient = new HttpClient($options);

//headers
$name = "User-Agent";
$value = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A";
$httpClient->setHeader($name, $value, true);

//cookies
$cookies = array(
    "name" => "value",
);
$httpClient->setCookies($cookies);

//basic auth
$httpClient->setAuthorization($user, $pass);

//send request
//methods - HttpClient::HTTP_GET, HttpClient::HTTP_POST, HttpClient::HTTP_PUT, HttpClient::HTTP_HEAD и HttpClient::HTTP_PATCH.
$httpClient->query($method, $url, $entityBody = null);

//result
$httpClient->getResult();
$httpClient->getStatus();
$httpClient->getContentType();
$httpClient->getEffectiveUrl();
$httpClient->getCookies();
$httpClient->getHeaders();
$httpClient->getError();

//download file
$httpClient->download('http://example.com/file.pdf', Application::getDocumentRoot() . '/upload/example/document.pdf');