• Czas czytania ~1 min
  • 05.06.2025

Laravel usprawnia walidację kolekcji, dodając obsługę domknięć do metody containsOneItem(), umożliwiając programistom sprawdzenie, czy dokładnie jeden element spełnia niestandardowe warunki, a nie tylko sprawdzanie rozmiaru kolekcji.

Wcześniej containsOneItem() mogła określić tylko, czy kolekcja zawierała dokładnie jeden element ogółem. Ulepszona metoda akceptuje teraz domknięcia, umożliwiając precyzyjną walidację, że dokładnie jeden element spełnia określone kryteria:

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

To ulepszenie okazuje się szczególnie cenne w scenariuszach walidacji reguł biznesowych:

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;
    }
}

Ulepszona metoda containsOneItem() zapewnia precyzyjną walidację kolekcji, zapewniając, że dokładnie jeden element spełnia określone warunki, dzięki czemu egzekwowanie reguł biznesowych jest bardziej niezawodne i wyraziste.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297

Codziennie zestrzeliwujemy „Shahedy”. Za każdym razem to uratowane życie. Potrzebujemy mobilności: busa lub przyczepy. Każda wpłata = kolejna noc pod ochroną.

🚐 Zbiórka na busa dla zespołu, pułk 1020 🎯 Cel: 500 000 ₴
🔗 Link do zbiórkiі 💳 4441 1111 2546 4663