ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter::getDescription PHP Method

getDescription() public method

public getDescription ( string $resourceClass ) : array
$resourceClass string
return array
    public function getDescription(string $resourceClass) : array
    {
        $description = [];
        $properties = $this->properties;
        if (null === $properties) {
            $properties = array_fill_keys($this->getClassMetadata($resourceClass)->getFieldNames(), null);
        }
        foreach ($properties as $property => $strategy) {
            if (!$this->isPropertyMapped($property, $resourceClass, true)) {
                continue;
            }
            if ($this->isPropertyNested($property)) {
                $propertyParts = $this->splitPropertyParts($property);
                $field = $propertyParts['field'];
                $metadata = $this->getNestedMetadata($resourceClass, $propertyParts['associations']);
            } else {
                $field = $property;
                $metadata = $this->getClassMetadata($resourceClass);
            }
            if ($metadata->hasField($field)) {
                $typeOfField = $this->getType($metadata->getTypeOfField($field));
                $strategy = $this->properties[$property] ?? self::STRATEGY_EXACT;
                $filterParameterNames = [$property];
                if (self::STRATEGY_EXACT === $strategy) {
                    $filterParameterNames[] = $property . '[]';
                }
                foreach ($filterParameterNames as $filterParameterName) {
                    $description[$filterParameterName] = ['property' => $property, 'type' => $typeOfField, 'required' => false, 'strategy' => $strategy];
                }
            } elseif ($metadata->hasAssociation($field)) {
                $filterParameterNames = [$property, $property . '[]'];
                foreach ($filterParameterNames as $filterParameterName) {
                    $description[$filterParameterName] = ['property' => $property, 'type' => 'string', 'required' => false, 'strategy' => self::STRATEGY_EXACT];
                }
            }
        }
        return $description;
    }

Usage Example

Beispiel #1
0
 public function testGetDescription()
 {
     $filter = new SearchFilter($this->managerRegistry, new RequestStack(), $this->iriConverter, $this->propertyAccessor);
     $this->assertEquals(['id' => ['property' => 'id', 'type' => 'int', 'required' => false, 'strategy' => 'exact'], 'id[]' => ['property' => 'id', 'type' => 'int', 'required' => false, 'strategy' => 'exact'], 'name' => ['property' => 'name', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'name[]' => ['property' => 'name', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'alias' => ['property' => 'alias', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'alias[]' => ['property' => 'alias', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'description' => ['property' => 'description', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'description[]' => ['property' => 'description', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummy' => ['property' => 'dummy', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummy[]' => ['property' => 'dummy', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummyDate' => ['property' => 'dummyDate', 'type' => 'DateTimeInterface', 'required' => false, 'strategy' => 'exact'], 'dummyDate[]' => ['property' => 'dummyDate', 'type' => 'DateTimeInterface', 'required' => false, 'strategy' => 'exact'], 'dummyFloat' => ['property' => 'dummyFloat', 'type' => 'float', 'required' => false, 'strategy' => 'exact'], 'dummyFloat[]' => ['property' => 'dummyFloat', 'type' => 'float', 'required' => false, 'strategy' => 'exact'], 'dummyPrice' => ['property' => 'dummyPrice', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummyPrice[]' => ['property' => 'dummyPrice', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'jsonData' => ['property' => 'jsonData', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'jsonData[]' => ['property' => 'jsonData', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'nameConverted' => ['property' => 'nameConverted', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'nameConverted[]' => ['property' => 'nameConverted', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummyBoolean' => ['property' => 'dummyBoolean', 'type' => 'bool', 'required' => false, 'strategy' => 'exact'], 'dummyBoolean[]' => ['property' => 'dummyBoolean', 'type' => 'bool', 'required' => false, 'strategy' => 'exact']], $filter->getDescription($this->resourceClass));
     $filter = new SearchFilter($this->managerRegistry, new RequestStack(), $this->iriConverter, $this->propertyAccessor, null, ['id' => null, 'name' => null, 'alias' => null, 'dummy' => null, 'dummyDate' => null, 'jsonData' => null, 'nameConverted' => null, 'foo' => null, 'relatedDummies.dummyDate' => null, 'relatedDummy' => null]);
     $this->assertEquals(['id' => ['property' => 'id', 'type' => 'int', 'required' => false, 'strategy' => 'exact'], 'id[]' => ['property' => 'id', 'type' => 'int', 'required' => false, 'strategy' => 'exact'], 'name' => ['property' => 'name', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'name[]' => ['property' => 'name', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'alias' => ['property' => 'alias', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'alias[]' => ['property' => 'alias', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummy' => ['property' => 'dummy', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummy[]' => ['property' => 'dummy', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'dummyDate' => ['property' => 'dummyDate', 'type' => 'DateTimeInterface', 'required' => false, 'strategy' => 'exact'], 'dummyDate[]' => ['property' => 'dummyDate', 'type' => 'DateTimeInterface', 'required' => false, 'strategy' => 'exact'], 'jsonData' => ['property' => 'jsonData', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'jsonData[]' => ['property' => 'jsonData', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'nameConverted' => ['property' => 'nameConverted', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'nameConverted[]' => ['property' => 'nameConverted', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'relatedDummies.dummyDate' => ['property' => 'relatedDummies.dummyDate', 'type' => 'DateTimeInterface', 'required' => false, 'strategy' => 'exact'], 'relatedDummies.dummyDate[]' => ['property' => 'relatedDummies.dummyDate', 'type' => 'DateTimeInterface', 'required' => false, 'strategy' => 'exact'], 'relatedDummy' => ['property' => 'relatedDummy', 'type' => 'string', 'required' => false, 'strategy' => 'exact'], 'relatedDummy[]' => ['property' => 'relatedDummy', 'type' => 'string', 'required' => false, 'strategy' => 'exact']], $filter->getDescription($this->resourceClass));
 }