Запросы и ответы
Каждое обращение к сайту — это запрос, на который приложение должно дать ответ. В Laravel запрос представлен объектом Request, а ответ формируют вспомогательные функции. С ними не нужно работать с $_GET, $_POST и заголовками напрямую.
Объект запроса
Laravel сам передаёт объект запроса в метод контроллера, если указать его в параметрах:
use Illuminate\Http\Request;
public function store(Request $request)
{
$title = $request->input('title');
$page = $request->query('page', 1);
return "Заголовок: $title";
}input() читает данные формы и JSON, query() — параметры из адреса. Вторым аргументом задают значение по умолчанию.
Удобные методы чтения
$name = $request->string('name')->trim();
$age = $request->integer('age');
$subscribed = $request->boolean('subscribe');
$date = $request->date('birthday');
$data = $request->only(['title', 'body']);
$rest = $request->except(['_token']);boolean() понимает значения 1, true, on, yes — удобно для флажков.
Проверка наличия
if ($request->has('email')) {
// поле прислано
}
if ($request->filled('email')) {
// поле прислано и не пустое
}Сведения о запросе
$request->method(); // GET, POST…
$request->path(); // posts/5
$request->url(); // адрес без параметров
$request->ip(); // адрес посетителя
$request->header('Accept');
$request->user(); // вошедший пользователь или null
$request->isMethod('post');Ответ: строка, массив, шаблон
То, что вернул метод контроллера, становится ответом:
return 'Простой текст';
return ['id' => 1, 'title' => 'Чай']; // превратится в JSON
return view('posts.show', ['post' => $post]);Код состояния и заголовки
Функция response() даёт полный контроль над ответом:
return response('Не найдено', 404);
return response()->json(['error' => 'Нет доступа'], 403);
return response($content)->header('Content-Type', 'text/plain');Функция abort() прерывает выполнение и показывает страницу ошибки: abort(404).
Перенаправление
return redirect('/posts');
return redirect()->route('posts.show', $post);
return back()->withInput();
return redirect()->route('posts.index')->with('status', 'Статья сохранена');back() возвращает на предыдущую страницу, withInput() сохраняет введённые данные для функции old(), а with() передаёт разовое сообщение.
Файлы
return response()->download(storage_path('app/report.pdf'));
return response()->file(storage_path('app/photo.jpg'));download() предлагает сохранить файл, file() показывает его прямо в браузере.
Частая ошибка
Значение из запроса всегда строка, даже если в поле ввели число. Сравнение $request->input('page') === 2 всегда ложно. Используйте методы с приведением типа — integer(), boolean() — или правила валидации.