Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Запросы и ответы

Каждое обращение к сайту — это запрос, на который приложение должно дать ответ. В 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() — или правила валидации.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.