git 4108ebc0b1aca39e323a42c15c45e81a8d21410c
---
# HTTP Requests (HTTP-запросы)
- [Получение объекта HTTP-запроса](#obtaining-a-request-instance)
- [Входных данных](#retrieving-input)
- [Предыдущие входные данные](#old-input)
- [Куки](#cookies)
- [Файлы](#files)
- [Other Request Information](#other-request-information)
## Получение объекта HTTP-запроса
### При помощи фасада
Фасад `Request` дает доступ к объекту HTTP-запроса:
$name = Request::input('name');
Не забудьте использовать конструкцию `use Request;` в начале файла класса.
### При помощи DI (dependency injection)
To obtain an instance of the current HTTP request via dependency injection, you should type-hint the class on your controller constructor or method. The current request instance will automatically be injected by the [service container](/docs/5.0/container):
Можно получить объект HTTP-запроса при помощи DI (dependency injection, внедрение зависимости). Способ заключается в том, что в аргументы конструктора контроллера помещается (type-hint) объект, который нам нужен, и Laravel, когда создает контроллер, создает этот объект (см. [сервис-контейнер](/docs/5.0/container)) и подает на вход конструктору контроллера:
input('name');
//
}
}
Если ваш метод контроллера ожидает параметр из роута, укажите его после зависимостей:
## Входные данные
#### Получение входных данных
Объект `Illuminate\Http\Request` предоставляет доступ к входным данным, например, к переменным POST или PUT, полученным из формы. Вам не нужно указывать явно метод запроса, есть универсальный метод:
$name = Request::input('name');
#### Получение переменной с дефолтным значением
$name = Request::input('name', 'Sally');
#### Определение, содержится ли переменная в запросе
if (Request::has('name'))
{
//
}
#### Получить все переменные запроса
$input = Request::all();
#### Получить избранные переменные
$input = Request::only('username', 'password'); // только эти
$input = Request::except('credit_card'); // все, кроме этой
C массивами можно работать через нотацию с точкой:
$input = Request::input('products.0.name');
## Предыдущие входные данные
Часто нужно сохранять входные данные для следующего запроса. Например, это нужно для того, чтобы после ошибки пользователя в форме не заставлять его вводить всё заново, а заполнить правильные поля самим.
#### Сохранение запроса во flash-переменных сессии
Метод `flash` сохранит текущие входные данные в [сессии](/docs/5.0/session), так, что они будут доступны в следующем запросе.
Request::flash();
#### Сохранение избранных переменных запроса
Request::flashOnly('username', 'email');
Request::flashExcept('password');
#### Редирект
Since you often will want to flash input in association with a redirect to the previous page, you may easily chain input flashing onto a redirect.
Чаще всего нам нужно сохранить данные и сделать редирект на урл с формой. В Laravel есть способ записать это просто и коротко:
return redirect('form')->withInput();
return redirect('form')->withInput(Request::except('password'));
#### Получение предыдущих данных
Чтобы получить сохранённые в сессии данные запроса, используйте метод `old`:
$username = Request::old('username');
Для использования в шаблонах можно использовать этот простой хэлпер:
{{ old('username') }}
## Куки
Все куки, которые пишет Laravel, зашифрованы - это значит, что на клиенте они не могут быть изменены. Изменённую на клиенте куку фреймворк просто не сможет расшифровать и прочесть.
#### Получение значения куки
$value = Request::cookie('name');
#### Добавить новую куку к запросу
Хэлпер `cookie` создает объект `Symfony\Component\HttpFoundation\Cookie`. Полученный класс может быть добавлен к HTTP-ответу (response) методом `withCookie`:
$response = new Illuminate\Http\Response('Hello World');
$response->withCookie(cookie('name', 'value', $minutes));
#### Создание вечной куки
"На самом деле нет". Время жизни "вечной" куки - 5 лет.
$response->withCookie(cookie()->forever('name', 'value'));
## Файлы
#### Получение загруженного файла
$file = Request::file('photo');
#### Определение, загружался ли файл в запросе
if (Request::hasFile('photo'))
{
//
}
Метод `file` возвращает экземпляр класса `Symfony\Component\HttpFoundation\File\UploadedFile`, который расширяет стандартный PHP-класс `SplFileInfo` и содержит все его методы.
#### Определение валидности загруженного файла
if (Request::file('photo')->isValid())
{
//
}
#### Перемещение загруженного файла
Request::file('photo')->move($destinationPath);
Request::file('photo')->move($destinationPath, $fileName);
### Другие методы работы с файлами
Полный список методов класса `Symfony\Component\HttpFoundation\File\UploadedFile` смотрите [справке API](http://api.symfony.com/2.5/Symfony/Component/HttpFoundation/File/UploadedFile.html).
## Другая информация о запросе
The `Request` class provides many methods for examining the HTTP request for your application and extends the `Symfony\Component\HttpFoundation\Request` class. Here are some of the highlights.
Класс `Request` содержит много методов, рассказывающих о HTTP-запросе, он также расширяет класс `Symfony\Component\HttpFoundation\Request` и содержит все его методы. Вот некоторые из них:
#### URI запроса
$uri = Request::path();
#### Метод запроса
$method = Request::method();
if (Request::isMethod('post'))
{
//
}
#### Проверка на соответствие урла шаблону
if (Request::is('admin/*'))
{
//
}
#### URL запроса
$url = Request::url();