Если вы отдаете данные в вашем API с помощью API ресурсов (через метод collection()), соблюдая при этом правила наименований, то, скорее всего, вам приходится постоянно импортировать пространство имен класса-ресурса с присвоением ему псевдонима через оператор as, так как название ресурса и модели совпадают.
Мне кажется это не очень практично. Я предлагаю реализовать в моделях метод collection(), который будет находить необходимый ресурс и вызывать метод collection() уже у него.
Для этого, напишем новый трейт Collectable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24<?php namespace App\Models\Concerns; use Illuminate\Support\Collection; trait Collectable { /** * Возвращает данные модели, пропущенные через класс-ресурс. * * @param Collection $collection * @return mixed */ public static function collection(Collection $collection) { $resourceClass = self::$resourceClass ?? class_basename(self::class); return call_user_func( ["\\App\\Http\\Resources\\$resourceClass", 'collection'], $collection ); } }
Осталось лишь подключить данный трейт к вашим моделям, данные которых вы возвращаете в вашем API.
Теперь не нужно обращаться к классу ресурса
Понравилось прочитанное?
Дайте мне «пять», кликнув раз, или же поаплодируйте быстрыми нажатиями, чтобы показать, насколько вам понравился материал.
Комментарии