/
githubmirror
/
framework
Обзор
Документация
Войти
/
githubmirror
/
framework
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
13.x
src/Illuminate/Http/Resources/CollectsResources.php
116 строк
3 KB
Lucas Michot
Change count array comparison to empty array comparison to improve performance (#59688)
14 апр 2026, 21:18
Не верифицирован
14 апр 2026, 21:18
ff97ab4
Код
Авторство
О чём код?
<?php namespace Illuminate\Http\Resources; use Illuminate\Http\Resources\Attributes\Collects; use Illuminate\Http\Resources\Json\JsonResource; use Illuminate\Pagination\AbstractCursorPaginator; use Illuminate\Pagination\AbstractPaginator; use Illuminate\Support\Collection; use Illuminate\Support\Str; use LogicException; use ReflectionClass; use Traversable; trait CollectsResources { /** * The cached Collects attribute values. * * @var array<class-string, class-string|false> */ protected static $cachedCollectsAttributes = []; /** * Map the given collection resource into its individual resources. * * @param mixed $resource * @return mixed */ protected function collectResource($resource) { if ($resource instanceof MissingValue) { return $resource; } if (is_array($resource)) { $resource = new Collection($resource); } $collects = $this->collects(); $this->collection = $collects && ! $resource->first() instanceof $collects ? $resource->mapInto($collects) : $resource->toBase(); return ($resource instanceof AbstractPaginator || $resource instanceof AbstractCursorPaginator) ? $resource->setCollection($this->collection) : $this->collection; } /** * Get the resource that this resource collects. * * @return class-string<\Illuminate\Http\Resources\Json\JsonResource>|null * * @throws \LogicException */ protected function collects() { $collects = null; if (! array_key_exists(static::class, static::$cachedCollectsAttributes)) { $attribute = (new ReflectionClass($this))->getAttributes(Collects::class); static::$cachedCollectsAttributes[static::class] = $attribute !== [] ? $attribute[0]->newInstance()->class : false; } if (static::$cachedCollectsAttributes[static::class]) { $collects = static::$cachedCollectsAttributes[static::class]; } elseif ($this->collects) { $collects = $this->collects; } elseif (str_ends_with(class_basename($this), 'Collection') && (class_exists($class = Str::replaceLast('Collection', '', get_class($this))) || class_exists($class = Str::replaceLast('Collection', 'Resource', get_class($this))))) { $collects = $class; } if (! $collects || is_a($collects, JsonResource::class, true)) { return $collects; } throw new LogicException('Resource collections must collect instances of '.JsonResource::class.'.'); } /** * Get the JSON serialization options that should be applied to the resource response. * * @return int * * @throws \ReflectionException */ public function jsonOptions() { $collects = $this->collects(); if (! $collects) { return 0; } return (new ReflectionClass($collects)) ->newInstanceWithoutConstructor() ->jsonOptions(); } /** * Get an iterator for the resource collection. * * @return \ArrayIterator */ public function getIterator(): Traversable { return $this->collection->getIterator(); } }