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.