ProgrammingPiotrN / ProjectNewWork

0 stars 0 forks source link

Dedykowany request #1

Open szymjab opened 5 months ago

szymjab commented 5 months ago

https://github.com/ProgrammingPiotrN/ProjectNewWork/blob/907a705ab417ca83ee2a85d00276f19b4765db8f/Blog/app/Http/Controllers/PostController.php#L19

Dobrą praktyką jest rozbijać kod na mniejsze kawałki, aby łatwiej było je otestować i wdrażać ewentualne zmiany.

W tym przypadku możemy stworzyć nowy request, PostStoreRequest z istniejącymi regułami. Proponuję je też trochę bardziej uściślić - title i content powinny być typu string, jeśli znamy ograniczenia w ilości znaków, to również można je tutaj wrzucić, lub oddelegować to do value objectu.

https://laravel.com/docs/11.x/validation#form-request-validation

ProgrammingPiotrN commented 5 months ago
  1. Utworzenie PostRequest:

php artisan make:request PostRequest

  1. Stworzenie własnych reguł walidacji:
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class PostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required|string|max:25',
            'content' => 'required|string',
        ];
    }
}
  1. Użycie requestu w kontrolerze:
public function store(Request $request): JsonResponse
    {
        $validatedData = $request->validated();

        // Utwórz nowy post
        $post = Post::create([
            'title' => $validatedData['title'],
            'content' => $validatedData['content'],
        ]);

        return response()->json(['message' => 'Post created successfully!', 'post' => $post], 201);
    }
  1. Zdefiniowanie trasy:

Route::resource('posts', PostController::class);