git 4deba2bfca6636d5cdcede3f2068eff3b59c15ce
- Получение объекта HTTP-запроса
- Входных данных
- Предыдущие входные данные
- Куки
- Файлы
- Other Request Information
Фасад Request
дает доступ к объекту HTTP-запроса:
$name = Request::input('name');
Не забудьте использовать конструкцию use Request;
в начале файла класса.
Можно получить объект 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();