вопросы пишите мне в телеграмм +375298176892
можно скачать офлайн версию сайта: code.mu old.code.mu

Редиректы в Laravel

Пусть у нас есть вот такие маршруты:

<?php Route::get('test/show1', 'TestController@show1'); Route::get('test/show2', 'TestController@show2'); ?>

Давайте по обращению к действиям контроллера будем выводить какие-нибудь строки:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show1() { return 'show1'; } public function show2() { return 'show2'; } } ?>

Давайте теперь сделаем так, чтобы при обращению к первому действию выполнялась переадресация на второе действие:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class TestController extends Controller { public function show1() { return redirect('test/show2'); // перенаправляем на адрес } public function show2() { return 'show2'; } } ?>

Сделайте действие с формой, в которой будет один инпут для ввода числа. Пусть форма отправляется на это же действие. Сделайте так, что если введено число от 1 до 10, то выполнится редирект на другое действие, представление которого выведет сообщение 'форма успешна отправлена'.

Если же введено число не из разрешенного диапазона, снова покажите пользователю форму, написав над ней сообщение о том, что введено некорректное число.

Редиректы с данными формы

При редиректе можно прикреплять данные формы с помощью метода withInput:

<?php return redirect('адрес')->withInput(); ?>

Отправленные таким образом данные можно будет получить на той странице, на которую выполнился редирект, с помощью объекта Request, подобно тому, как получаются данные обычной формы.

Посмотрим применение на практическом примере.

Пусть у нас в контроллере Test есть действие form со следующей формой, значением ожидающей какое-нибо число:

<form action=""> <input type="text" name="num"> <input type="submit"> </form>

Давайте после отправки формы проверим, попадает ли введенное число в промежуток от 0 до 10 и, если попадает, выполним редирект на другое действие, передав в него данные нашей формы:

<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class TestController extends Controller { public function form(Request $request) { // Если форма была отправлена... if ($request->has('num')) { // Получим отправленное число: $num = $request->input('num'); // Если выполняется условие... if ($num >= 0 and $num <= 10) { // Выполним редирект с данными формы: return redirect('test/result')->withInput(); } else { // Условие не выполнено - опять покажем форму: return view('test.form'); } } else { // Если форма не была отправлена... return view('test.form'); // покажем представление с формой } } public function result(Request $request) { // После редиректа выведем на экран данные формы: return $request->input('num'); } } ?>

Учтите, что если форма отправляется методом POST, то и при редиректе с withInput вы попадете в новый маршрут с методом POST.

На практике это значит, что маршрут, НА который мы редиректим должен разрешать метод POST (через Route::post), иначе фреймворк выдаст ошибку.

Спросите у пользователя email с помощью формы. Если этот email корректный, то выполните редирект на другое действие и выведите в представлении этого действия переданный email и сообщение о том, что он корректен.

Если же email не корректный, снова покажите форму, показав над ней сообщение о некорректности ввода.

Исключение полей формы

При редиректе можно исключать не нужные поля формы через except:

<?php return redirect('адрес')->withInput($request->except('password')); ?>

Именованные маршруты и редирект

По следующей ссылке изучите раздел Именованные маршруты. Решите затем следующие задачи:

Сделайте именованный маршрут. Выполните на него редирект с другого действия.

Сделайте именованный маршрут с параметрами, например, /test/{param1}/{param2}. Выполните редирект на данный маршрут, передав при этом значения параметров.