Почему не срабатвает метод prepareForValidation() в кастомном Request?

Хочу при добавлении определенного материала добавлять user_id к данным,которые проходят валидацию, чтобы в последствии можно было просто добавлять пост такой конструкцией:

Post::create($request->validated());

Создал свой Request:

<?php

namespace App\Http\Requests\Review;

use Illuminate\Foundation\Http\FormRequest;

class StoreReviewRequest extends FormRequest
{
public function prepareForValidation() :void
{        
    $this->merge([
        'ip_address' => $this->ip(),
        'status' =>  ($this->user()->hasRole('admin')) ? 'published' : 'moderation',
        'user_id' => $this->user()->id,
    ]);
}

public function rules()
{
    return [
        'message' => ['required', 'string'],
        'mood' => ['string', 'required'],
        'title' => ['string', 'required'],
        'post_rating' => ['numeric', 'required'],
        'post_id' => ['numeric', 'required'],
        'user_id' => ['numeric', 'required'],
        'ip_address' => ['required'],
        'files' => ['max:3072'],
    ];
}

}

Но при отправке запроса я на выходе в $request->validated() получаю только те данные, что сам передал. Никак не могу понять. в чем проблема? Сам контроллер:

public function store(StoreReviewRequest $request)
{
   $validatedData = $request->validated();
}

Ответы (2 шт):

Автор решения: Web Desg

Замените свой класс StoreReviewRequest на этот

    <?php
    
    namespace App\Http\Requests\Review;
    
    use Illuminate\Foundation\Http\FormRequest;
    
    class StoreReviewRequest extends FormRequest {
    
        public function validate()
        {
            $this->beforeValidate();
            parent::validate();
        }
        
        private function beforeValidate()
        {        
            $this->merge([
                'ip_address' => $this->ip(),
                'status' =>  ($this->user()->hasRole('admin')) ? 'published' : 'moderation',
                'user_id' => $this->user()->id,
            ]);
        }
        
        public function rules()
        {
            return [
                'message' => ['required', 'string'],
                'mood' => ['string', 'required'],
                'title' => ['string', 'required'],
                'post_rating' => ['numeric', 'required'],
                'post_id' => ['numeric', 'required'],
                'user_id' => ['numeric', 'required'],
                'ip_address' => ['required'],
                'files' => ['max:3072'],
            ];
        }
    
 }
→ Ссылка
Автор решения: derwin

метод ->validated() отдаёт данные после валидатора, который берет правила в методе rules(). Могу предположить, что "не работает" по причине того, что для смерженных данных нет правил валидации.

→ Ссылка