git 4108ebc0b1aca39e323a42c15c45e81a8d21410c
- Получение объекта HTTP-запроса
- Входных данных
- Предыдущие входные данные
- Куки
- Файлы
- Other Request Information
Фасад Request
дает доступ к объекту HTTP-запроса:
$name = Request::input('name');
Не забудьте использовать конструкцию use Request;
в начале файла класса.
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:
Можно получить объект HTTP-запроса при помощи DI (dependency injection, внедрение зависимости). Способ заключается в том, что в аргументы конструктора контроллера помещается (type-hint) объект, который нам нужен, и Laravel, когда создает контроллер, создает этот объект (см. сервис-контейнер) и подает на вход конструктору контроллера:
<?php namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller {
/**
* Сохранение данных пользователя.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$name = $request->input('name');
//
}
}
Если ваш метод контроллера ожидает параметр из роута, укажите его после зависимостей:
<?php namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;
class UserController extends Controller {
/**
* Store a new user.
*
* @param Request $request
* @param int $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
}
Объект 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
сохранит текущие входные данные в сессии, так, что они будут доступны в следующем запросе.
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.
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 = Request::path();
$method = Request::method();
if (Request::isMethod('post'))
{
//
}
if (Request::is('admin/*'))
{
//
}
$url = Request::url();