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

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

роут

Route::match(['get', 'post'], '/test', '[email protected]');
Route::get('/test/result', '[email protected]');

контроллер

    <?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->isMethod('post')){
            if(preg_match('[email protected]~m', $request->input('email'), $match)){
                return redirect('/test/result')->withInput();
            }
           else{
               return view('test.form', ['error'=>'email не корректный!']);
           }
        }
        if($request->isMethod('get')){
            return view('test.form');
        }
    }
public function result(Request $request)
{
    return view('test.result', ['request'=> $request]);
}
}

представление по адресу /test/result

{{ $request->input('email') }}

представление по адресу /test (форма с которой мыло отправляю)

    @if (!empty($error))
    {{$error}}
    @endif
<form action="" method="POST">
    {{ csrf_field() }}
    <input type="text" name="email">
    <input type="submit">
</form>

В итоге редирект на белую страницу, ни ошибок ни данных. В чем ошибка?


Ответы (1 шт):

Автор решения: Maksim Oleseiuk

В форме с которой отправляете запрос скорее всего не отправляется сам запрос,так как action у вас не указан. Во первых задайте name роуту

Route::match(['get', 'post'], '/test', '[email protected]')->name('test');
Route::get('/test/result', '[email protected]')->name('result');

В форме задайте вот так

    @if (!empty($error))
    {{$error}}
    @endif
<form action="{{route('test')}}" method="POST">
    {{ csrf_field() }}
    <input type="text" name="email">
    <input type="submit">
</form>

В контроллере же,в функции form укажите вместо redirect -> view() и в нём страницу на которую хотите перебросить пользователя.

public function form(Request $request)
    {
        if($request->isMethod('post')){
            if(preg_match('[email protected]~m', $request->input('email'), $match)){
                return view('test.result', ['request'=> $request->input('email')]);
            }
           else{
               return view('test.form', ['error'=>'email не корректный!']);
           }
        }
        if($request->isMethod('get')){
            return view('test.form');
        }

Если возникнут ошибки,напишите их в комментарии - пообсуждаем

→ Ссылка