• Время чтения ~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