Skip to content

Latest commit

 

History

History
232 lines (140 loc) · 8.46 KB

requests.md

File metadata and controls

232 lines (140 loc) · 8.46 KB

git 4108ebc0b1aca39e323a42c15c45e81a8d21410c


HTTP Requests (HTTP-запросы)

Получение объекта 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:

Можно получить объект 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-переменных сессии

Метод 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 запроса

$uri = Request::path();

Метод запроса

$method = Request::method();

if (Request::isMethod('post'))
{
	//
}

Проверка на соответствие урла шаблону

if (Request::is('admin/*'))
{
	//
}

URL запроса

$url = Request::url();