• Час читання ~1 хв
  • 05.06.2025

Laravel покращує перевірку колекції, додаючи підтримку закриття до методу containsOneItem(), дозволяючи розробникам перевіряти, що саме один елемент задовольняє користувацькі умови, а не просто перевіряти розмір колекції.

Раніше containsOneItem() міг визначати лише те, чи містить колекція рівно один елемент всього. Удосконалений метод тепер приймає закриття, дозволяючи точну перевірку, що саме один елемент відповідає конкретним критеріям:

$collection = collect([1, 2, 3]);
$collection->containsOneItem(fn($item) => $item === 2); // true
$collection->containsOneItem(fn($item) => $item > 1);   // false (2 and 3 match)

Це вдосконалення виявляється особливо цінним у сценаріях

class BusinessRuleValidator
{
    public function validateTeamStructure(Collection $members)
    {
        // Ensure exactly one team lead exists
        if (!$members->containsOneItem(fn($member) => $member->role === 'lead')) {
            throw new ValidationException('Exactly one team lead required');
        }
        // Ensure exactly one budget approver
        if (!$members->containsOneItem(fn($member) => $member->can_approve_budget)) {
            throw new ValidationException('Exactly one budget approver required');
        }
        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("Exactly one {$type} fee required");
            }
        }
        return $items;
    }
}

перевірки бізнес-правил:Покращений метод containsOneItem() забезпечує точну перевірку збору, гарантуючи, що саме один елемент відповідає конкретним умовам, роблячи виконання бізнес-правил більш надійним і виразним.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297

Ми знищуємо "шахеди" щодня. Щоразу — це врятовані життя. Але нам потрібна мобільність: бус або прицеп. Кожен донат = ще одна ніч під захистом.

🚐 Збір на бус для мого екіпажу, полк 1020 🎯 Ціль: 500 000 ₴
🔗 Посилання на банку 💳 4441 1111 2546 4663