Wykonujemy drobne ćwiczenie w oparciu o wiedzę, którą już zdobyliśmy. Tworzymy route, które pozwala nam zwracać formularz w postaci json.
Ok, najpierw nasza route w web.php:
Route::match(['get', 'post'], '/json123', function (Request $request) {
if ($request->isMethod('get')) {
return view('jsonform');
} else if ($request->isMethod('post')) {
}
})->name('json123');
Teraz widok jsonform.blade.php:
@extends('layouts.app')
@section('navbar')
@parent
<a href="https://www.google.com">Google</a>
@endsection
@section('content')
<h1>JSON FORM!</h1>
<form action="{{route('json123')}}" method="POST">
<label for="author">Author</label> </br>
<input type="text" name="author" id="author" value="{{old('author')}}"> </br>
@error('author')
<p>{{$message}}</p>
@enderror
<label for="description">Content:</label> </br>
<textarea name="description" id="description">{{old('description')}}</textarea></br>
@error('description')
<p>{{$message}}</p>
@enderror
<input type="submit" value="send">
@csrf
</form>
@endsection
Ok dodajmy walidację + sprawdźmy na jaką metodę przekieruje nas route do named route, gdy mamy match:
Route::match(['get', 'post'], '/json123', function (Request $request) {
if ($request->isMethod('get')) {
return view('jsonform');
} else if ($request->isMethod('post')) {
$request->validate([
'author' => 'required',
'description' => 'required'
]);
session()->flash("status", "entry created!");
return redirect()->route("json123");
}
})->name('json123');
Jak widać przekierowuje na domyślne get. Ok, ale my chcemy zwrócić json, nie przekierowywać.
Route::match(['get', 'post'], '/json123', function (Request $request) {
if ($request->isMethod('get')) {
return view('jsonform');
} else if ($request->isMethod('post')) {
$request->validate([
'author' => 'required',
'description' => 'required'
]);
$entry = [
'author' => $request->input('author'),
'description' => $request->input('description'),
];
return response()->json($entry);
}
})->name('json123');
Response->json zwraca jsona. Z kolei request->input bierze input z formularza. Request->query zaś z query url param. Powinniśmy już powoli ogarniać, jak to wszystko działa.