Nie ma tu nic, czego nie przerobiliśmy pisząc własny framework. Teraz pokazujemy, jak działa to w Laravelu. Do dzieła.

Ok, podrasujmy nasz formularz:

@extends('layouts.app')


@section('content')

 <h1>Hello World!</h1>
  <form action="{{route('main')}}" method="POST">
      <label for="author">Author</label> </br>
     <input type="text" name="author" id="author"> </br>
     <label for="description">Content:</label> </br>
     <textarea name="description" id="description"></textarea></br>
    <input type="submit" value="send">
    @csrf
  </form>
@endsection

Ok, wykorzystajmy request do walidacji inputu:

Route::post("/", function(Request $request){
    $request->validate([
        'author' => 'required',
        'description' => 'required'
    ]);
    session()->flash("status", "entry created!");
    return redirect()->route("main");
});

To bardzo prosty sposób, później będziemy korzystać z tzw. form requestów, ale na razie musi wystarczyć. Spróbujmy wysłać bez wymaganych pól nasz formularz – zobaczmy, że nic się nie dzieje.

Ok, ale trzeba jeszcze dodać wyświetlanie errorów:

@extends('layouts.app')


@section('content')

 <h1>Hello World!</h1>
  <form action="{{route('main')}}" method="POST">
      <label for="author">Author</label> </br>
     <input type="text" name="author" id="author"> </br>
        @error('author')
            <p>{{$message}}</p>
        @enderror
     <label for="description">Content:</label> </br>
     <textarea name="description" id="description"></textarea></br>
        @error('description')
            <p>{{$message}}</p>
        @enderror
    <input type="submit" value="send">
    @csrf
  </form>
@endsection

Teraz błędy nam się wyświetlają. Natomiast stary input nie zostaje. Od tego jest old helper:

@extends('layouts.app')


@section('content')

 <h1>Hello World!</h1>
  <form action="{{route('main')}}" 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

Też robiąc własny framework MVC robiliśmy te old helpery i error-listy (natomiast ile z tego trafiło do finalnego projektu sam nie wiem, więc na GitHub nie odsyłam tylko do tamtych lekcji).

Teraz widzimy, jak działa to od drugiej strony, czyli użytkownika frameworka.