Spec-Zone.ru › Phalcon 2

Окружение запроса

Каждый HTTP-запрос (обычно исходящий от браузера) содержит дополнительную информацию о запросе, такую как данные заголовков, файлы, переменные и т.д. Веб-приложению необходимо разобрать эту информацию, чтобы предоставить соответствующий ответ запросившему. Phalcon\Http\Request инкапсулирует информацию о запросе, позволяя получить к ней доступ объектно-ориентированным способом.

// Getting a request instance
$request = new \Phalcon\Http\Request();

// Check whether the request was made with method POST
if ($request->isPost() == true) {

    // Check whether the request was made with Ajax
    if ($request->isAjax() == true) {
        echo "Request was made using POST and AJAX";
    }
}

Получение значений

PHP автоматически заполняет суперглобальные массивы $_GET и $_POST в зависимости от типа запроса. Эти массивы содержат значения, присутствующие в отправленных формах или параметрах, переданных через URL. Переменные в массивах никогда не очищаются и могут содержать недопустимые символы или даже вредоносный код, что может привести к инъекции SQL или атакам типа "Межсайтовый скриптинг (XSS)".

Phalcon\Http\Request позволяет получить доступ к значениям, хранящимся в массивах $_REQUEST, $_GET и $_POST, и очистить или отфильтровать их с помощью сервиса «filter» (по умолчанию Phalcon\Filter). Следующие примеры демонстрируют такое же поведение:

// Manually applying the filter
$filter = new Phalcon\Filter();

$email  = $filter->sanitize($_POST["user_email"], "email");

// Manually applying the filter to the value
$filter = new Phalcon\Filter();
$email  = $filter->sanitize($request->getPost("user_email"), "email");

// Automatically applying the filter
$email = $request->getPost("user_email", "email");

// Setting a default value if the param is null
$email = $request->getPost("user_email", "email", "[email protected]");

// Setting a default value if the param is null without filtering
$email = $request->getPost("user_email", null, "[email protected]");

Доступ к запросу из контроллеров

Наиболее распространенное место для доступа к окружению запроса — действие контроллера. Чтобы получить доступ к объекту Phalcon\Http\Request из контроллера, необходимо использовать общедоступное свойство $this->request контроллера:

use Phalcon\Mvc\Controller;

class PostsController extends Controller
{

    public function indexAction()
    {

    }

    public function saveAction()
    {

        // Check if request has made with POST
        if ($this->request->isPost() == true) {

            // Access POST data
            $customerName = $this->request->getPost("name");
            $customerBorn = $this->request->getPost("born");

        }

    }

}

Загрузка файлов

Другой распространённой задачей является загрузка файлов. Phalcon\Http\Request предлагает объектно-ориентированный способ выполнения этой задачи:

use Phalcon\Mvc\Controller;

class PostsController extends Controller
{

    public function uploadAction()
    {
        // Check if the user has uploaded files
        if ($this->request->hasFiles() == true) {

            // Print the real file names and sizes
            foreach ($this->request->getUploadedFiles() as $file) {

                //Print file details
                echo $file->getName(), " ", $file->getSize(), "\n";

                //Move the file into the application
                $file->moveTo('files/' . $file->getName());
            }
        }
    }

}

Каждый объект, возвращаемый Phalcon\Http\Request::getUploadedFiles(), является экземпляром класса Phalcon\Http\Request\File. Использование суперглобального массива $_FILES обеспечивает аналогичное поведение. Phalcon\Http\Request\File инкапсулирует только информацию, относящуюся к каждому загруженному файлу.

Работа с заголовками

Как упоминалось выше, заголовки запроса содержат полезную информацию, которая позволяет отправлять правильный ответ пользователю. Следующие примеры демонстрируют использование этой информации:

// get the Http-X-Requested-With header
$requestedWith = $request->getHeader("HTTP_X_REQUESTED_WITH");
if ($requestedWith == "XMLHttpRequest") {
    echo "The request was made with Ajax";
}

// Same as above
if ($request->isAjax()) {
    echo "The request was made with Ajax";
}

// Check the request layer
if ($request->isSecureRequest() == true) {
    echo "The request was made using a secure layer";
}

// Get the servers's ip address. ie. 192.168.0.100
$ipAddress = $request->getServerAddress();

// Get the client's ip address ie. 201.245.53.51
$ipAddress = $request->getClientAddress();

// Get the User Agent (HTTP_USER_AGENT)
$userAgent = $request->getUserAgent();

// Get the best acceptable content by the browser. ie text/xml
$contentType = $request->getAcceptableContent();

// Get the best charset accepted by the browser. ie. utf-8
$charset = $request->getBestCharset();

// Get the best language accepted configured in the browser. ie. en-us
$language = $request->getBestLanguage();

© 2011–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/request.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API