Метод Collection::wrap у Laravel забезпечує безперебійну конверсію різних типів даних у колекції, гарантуючи однакову обробку колекцій незалежно від формату вхідних даних
Метод wrap ефективно працює з різними типами значень:
use Illuminate\Support\Collection;
// Обгортка одного значення
$collection = Collection::wrap('Alice Smith');
// Результат: ['Alice Smith']
// Обгортка масиву
$collection = Collection::wrap(['Alice Smith']);
// Результат: ['Alice Smith']
// Обгортка існуючої колекції
$collection = Collection::wrap(collect('Alice Smith'));
// Результат: ['Alice Smith']
Ось приклад використання у сервісі сповіщень по електронній пошті:
class NotificationService
{
public function sendEmails($recipients, $message)
{
return Collection::wrap($recipients)
->map(fn($email) => $this->validateEmail($email))
->filter()
->each(fn($email) => $this->dispatch($email, $message));
}
public function assignCategories($product, $categories)
{
$currentCategories = $product->categories;
$newCategories = Collection::wrap($categories)
->unique()
->diff($currentCategories);
$product->categories()->sync($newCategories);
return $product;
}
public function formatNotifications($notifications)
{
return Collection::wrap($notifications)
->map(fn($notification) => [
'id' => $notification->id,
'message' => $notification->content,
'timestamp' => $notification->created_at
])
->sortByDesc('timestamp');
}
}
class AlertController extends Controller
{
public function broadcast(Request $request, NotificationService $service)
{
$alerts = AlertService::latest($request->limit);
return $service->formatNotifications($alerts);
}
}
Метод wrap забезпечує єдину обробку колекцій незалежно від типу вхідних даних, роблячи ваш код більш надійним і гнучким