Laravel покращує валідацію колекцій, додаючи підтримку замикань до методу containsOneItem()
. Це дозволяє розробникам перевіряти, що саме один елемент задовольняє заданим умовам, замість простого перевіряння кількості елементів у колекції
Раніше метод containsOneItem()
лише з’ясовував, чи містить колекція точно один елемент. Оновлений метод тепер приймає замикання, що дозволяє точно валідувати наявність одного елемента, який відповідає конкретним критеріям:
$collection = collect([1, 2, 3]);
$collection->containsOneItem(fn($item) => $item === 2); // true
$collection->containsOneItem(fn($item) => $item > 1); // false (2 і 3 відповідають)
Це покращення особливо корисне у сценаріях валідації бізнес-правил:
class BusinessRuleValidator
{
public function validateTeamStructure(Collection $members)
{
// Перевірка наявності одного лідера команди
if (!$members->containsOneItem(fn($member) => $member->role === 'lead')) {
throw new ValidationException('Потрібен точно один лідер команди');
}
// Перевірка наявності одного уповноваженого на бюджет
if (!$members->containsOneItem(fn($member) => $member->can_approve_budget)) {
throw new ValidationException('Потрібен точно один уповноважений на бюджет');
}
return true;
}
public function validateInvoiceItems(Collection $items)
{
$validations = [
'handling' => $items->containsOneItem(fn($item) => $item->type === 'handling'),
'processing' => $items->containsOneItem(fn($item) => $item->type === 'processing'),
'delivery' => $items->containsOneItem(fn($item) => $item->type === 'delivery')
];
foreach ($validations as $type => $isValid) {
if (!$isValid) {
throw new ValidationException("Потрібно точно одне {$type} збори");
}
}
return $items;
}
}
Оновлений метод containsOneItem()
забезпечує точну валідацію колекцій, гарантуючи, що лише один елемент відповідає визначеним умовам. Це робить дотримання бізнес-правил більш надійним і зрозумілим