Laravel редирект с данными формы
Учу лару, такое задание - " Спросите у пользователя email с помощью формы. Если этот email корректный, то выполните редирект на другое действие и выведите в представлении этого действия переданный email и сообщение о том, что он корректен."
роут
Route::match(['get', 'post'], '/test', 'TestController@form');
Route::get('/test/result', 'TestController@result');
контроллер
<?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('~@~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 шт):
В форме с которой отправляете запрос скорее всего не отправляется сам запрос,так как action у вас не указан. Во первых задайте name роуту
Route::match(['get', 'post'], '/test', 'TestController@form')->name('test');
Route::get('/test/result', 'TestController@result')->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('~@~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');
}
Если возникнут ошибки,напишите их в комментарии - пообсуждаем