ApiPlatform\Core\Bridge\Doctrine\Orm\Metadata\Property\DoctrineOrmPropertyMetadataFactory::create PHP Method

create() public method

public create ( string $resourceClass, string $property, array $options = [] ) : PropertyMetadata
$resourceClass string
$property string
$options array
return ApiPlatform\Core\Metadata\Property\PropertyMetadata
    public function create(string $resourceClass, string $property, array $options = []) : PropertyMetadata
    {
        $propertyMetadata = $this->decorated->create($resourceClass, $property, $options);
        if (null !== $propertyMetadata->isIdentifier()) {
            return $propertyMetadata;
        }
        $manager = $this->managerRegistry->getManagerForClass($resourceClass);
        if (!$manager) {
            return $propertyMetadata;
        }
        $doctrineClassMetadata = $manager->getClassMetadata($resourceClass);
        if (!$doctrineClassMetadata) {
            return $propertyMetadata;
        }
        $identifiers = $doctrineClassMetadata->getIdentifier();
        foreach ($identifiers as $identifier) {
            if ($identifier === $property) {
                $propertyMetadata = $propertyMetadata->withIdentifier(true);
                if ($doctrineClassMetadata instanceof ClassMetadataInfo) {
                    $writable = $doctrineClassMetadata->isIdentifierNatural();
                } else {
                    $writable = false;
                }
                $propertyMetadata = $propertyMetadata->withWritable($writable);
                break;
            }
        }
        if (null === $propertyMetadata->isIdentifier()) {
            $propertyMetadata = $propertyMetadata->withIdentifier(false);
        }
        return $propertyMetadata;
    }

Usage Example

 public function testCreateClassMetadata()
 {
     $propertyMetadata = new PropertyMetadata();
     $propertyMetadata = $propertyMetadata->withWritable(true);
     $propertyMetadataFactory = $this->prophesize(PropertyMetadataFactoryInterface::class);
     $propertyMetadataFactory->create(Dummy::class, 'id', [])->shouldBeCalled()->willReturn($propertyMetadata);
     $classMetadata = $this->prophesize(ClassMetadata::class);
     $classMetadata->getIdentifier()->shouldBeCalled()->willReturn(['id']);
     $objectManager = $this->prophesize(ObjectManager::class);
     $objectManager->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadata->reveal());
     $managerRegistry = $this->prophesize(ManagerRegistry::class);
     $managerRegistry->getManagerForClass(Dummy::class)->shouldBeCalled()->willReturn($objectManager->reveal());
     $doctrineOrmPropertyMetadataFactory = new DoctrineOrmPropertyMetadataFactory($managerRegistry->reveal(), $propertyMetadataFactory->reveal());
     $doctrinePropertyMetadata = $doctrineOrmPropertyMetadataFactory->create(Dummy::class, 'id', []);
     $this->assertEquals($doctrinePropertyMetadata->isIdentifier(), true);
     $this->assertEquals($doctrinePropertyMetadata->isWritable(), false);
 }
DoctrineOrmPropertyMetadataFactory