Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/TransformsToResource.php
Строк: 95
<?php

namespace IlluminateDatabaseEloquentConcerns;

use 
IlluminateDatabaseEloquentAttributesUseResource;
use 
IlluminateHttpResourcesJsonJsonResource;
use 
IlluminateSupportStr;
use 
LogicException;
use 
ReflectionClass;

trait 
TransformsToResource
{
    
/**
     * Create a new resource object for the given resource.
     *
     * @param  class-string<IlluminateHttpResourcesJsonJsonResource>|null  $resourceClass
     * @return IlluminateHttpResourcesJsonJsonResource
     */
    
public function toResource(?string $resourceClass null): JsonResource
    
{
        if (
$resourceClass === null) {
            return 
$this->guessResource();
        }

        return 
$resourceClass::make($this);
    }

    
/**
     * Guess the resource class for the model.
     *
     * @return IlluminateHttpResourcesJsonJsonResource
     *
     * @throws LogicException
     */
    
protected function guessResource(): JsonResource
    
{
        
$resourceClass $this->resolveResourceFromAttribute(static::class);

        if (
$resourceClass !== null && class_exists($resourceClass)) {
            return 
$resourceClass::make($this);
        }

        foreach (static::
guessResourceName() as $resourceClass) {
            if (
is_string($resourceClass) && class_exists($resourceClass)) {
                return 
$resourceClass::make($this);
            }
        }

        throw new 
LogicException(sprintf('Failed to find resource class for model [%s].'get_class($this)));
    }

    
/**
     * Guess the resource class name for the model.
     *
     * @return array{class-string<IlluminateHttpResourcesJsonJsonResource>, class-string<IlluminateHttpResourcesJsonJsonResource>}
     */
    
public static function guessResourceName(): array
    {
        
$modelClass = static::class;

        if (! 
Str::contains($modelClass'\Models\')) {
            return [];
        }

        $relativeNamespace = Str::after($modelClass, '
\Models\');

        $relativeNamespace = Str::contains($relativeNamespace, '
\')
            ? Str::before($relativeNamespace, '
\'.class_basename($modelClass))
            : '';

        $potentialResource = sprintf(
            '
%s\Http\Resources\%s%s',
            Str::before($modelClass, '
\Models'),
            (string) $relativeNamespace !== '' ? $relativeNamespace.'
\' : '',
            class_basename($modelClass)
        );

        return [$potentialResource.'
Resource', $potentialResource];
    }

    /**
     * Get the resource class from the class attribute.
     *
     * @param  class-string<IlluminateHttpResourcesJsonJsonResource>  $class
     * @return class-string<*>|null
     */
    protected function resolveResourceFromAttribute(string $class): ?string
    {
        if (! class_exists($class)) {
            return null;
        }

        $attributes = (new ReflectionClass($class))->getAttributes(UseResource::class);

        return $attributes !== []
            ? $attributes[0]->newInstance()->class
            : null;
    }
}
Онлайн: 2
Реклама