[ad_1]
I’ve got the TransactionRequest which handles the validation of an Transaction. There are few simple rules, but also some complicated Rules I’ve created.
Now I am making an action of adding (confirming) multiple transactions in one request – ConfirmTransactionsRequest. It consists of “transactions” array, which I validate by “array” and “min:1” rules, however I want to validate every row using the request I mentioned about. There is a lot of logic in the TransactionRequest and I don’t want to duplicate it.
Is there a way to use the TransactionRequest in the ConfirmTransactionsRequest? I’ve tried to create request instance inside foreach loop, but it’s not working. Here’s my current code:
class TransactionRequest extends FormRequest
{
private $rules = [];
private $baseRules = [
'amount' => ['required', 'numeric', 'min:0.01'],
'date' => ['required', 'date'],
'note' => ['sometimes', 'max:100']
];
// I can get the simple rules by executing this method, but it don't see request input
public function rules(): array
{
$transaction = $this->transactionsR()->findOne($this->input('id'));
$selectedLoan = $this->loansR()->findOne($this->input('loan_id'));
(...)
}
}
class ConfirmTransactionsRequest extends FormRequest
{
public function rules()
{
// Not working
foreach ($this->input('transactions') as $row) {
$transactionRequest = new TransactionRequest([], $row);
$transactionRequest->validated(); // "Call to a member function validated() on null"
}
$rules = $this->prepareTransactionRequestValidationToApplyToEveryRow($transactionRequest->rules());
$rules['planned_transactions'] = ['required', 'array', 'min:1'];
return $rules;
}
}
[ad_2]