From f8a296433dcdcbcb4cfa06f1748a528cf8df378b Mon Sep 17 00:00:00 2001 From: Andreas Braun Date: Tue, 8 Jan 2019 19:42:03 +0100 Subject: [PATCH] Add deprecation layer for fieldName attributes (#1834) --- UPGRADE-1.3.md | 6 +++ doctrine-mongo-mapping.xsd | 12 ++++++ .../ODM/MongoDB/Mapping/Driver/XmlDriver.php | 41 +++++++++++++++++-- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/UPGRADE-1.3.md b/UPGRADE-1.3.md index d05ad6d1a5..8086091821 100644 --- a/UPGRADE-1.3.md +++ b/UPGRADE-1.3.md @@ -42,3 +42,9 @@ The `Doctrine\ODM\MongoDB\Mapping\ClassMetadataInfo` class has been deprecated in favor of `Doctrine\ODM\MongoDB\Mapping\ClassMetadata` and will be dropped in 2.0. +### XML mappings + + * The `writeConcern` attribute in document mappings has been deprecated and + will be dropped in 2.0. Use `write-concern` instead. + * The `fieldName` attribute in field mappings has been deprecated and will be + dropped in 2.0. Use `field-name` instead. diff --git a/doctrine-mongo-mapping.xsd b/doctrine-mongo-mapping.xsd index a3dd68dc07..f6d476ffc2 100644 --- a/doctrine-mongo-mapping.xsd +++ b/doctrine-mongo-mapping.xsd @@ -54,7 +54,9 @@ + + @@ -84,7 +86,9 @@ + + @@ -127,7 +131,9 @@ + + @@ -142,7 +148,9 @@ + + @@ -169,7 +177,9 @@ + + @@ -195,7 +205,9 @@ + + diff --git a/lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php index 53e005e597..10155ebe3a 100644 --- a/lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ODM/MongoDB/Mapping/Driver/XmlDriver.php @@ -91,9 +91,14 @@ public function loadMetadataForClass($className, ClassMetadata $class) $class->setCollection((string) $xmlRoot['collection']); } } - if (isset($xmlRoot['writeConcern'])) { + + if (isset($xmlRoot['write-concern'])) { + $class->setWriteConcern((string) $xmlRoot['write-concern']); + } elseif (isset($xmlRoot['writeConcern'])) { + @trigger_error(sprintf('The "writeConcern" attribute in the mapping file for class "%s" is deprecated and will be dropped in 2.0. Please use "write-concern" instead.', $class->getName()), E_USER_DEPRECATED); $class->setWriteConcern((string) $xmlRoot['writeConcern']); } + if (isset($xmlRoot['inheritance-type'])) { $inheritanceType = (string) $xmlRoot['inheritance-type']; $class->setInheritanceType(constant(MappingClassMetadata::class . '::INHERITANCE_TYPE_' . $inheritanceType)); @@ -206,6 +211,19 @@ public function loadMetadataForClass($className, ClassMetadata $class) $mapping['notSaved'] = ('true' === (string) $attributes['not-saved']); } + if (isset($attributes['field-name'])) { + $mapping['fieldName'] = (string) $attributes['field-name']; + } elseif (isset($attributes['fieldName'])) { + @trigger_error( + sprintf( + 'Field "%s" in class "%s" is mapped using a "fieldName" attribute which is deprecated. Use the "field-name" attribute instead.', + isset($mapping['name']) ? $mapping['name'] : $mapping['fieldName'], + $class->getName() + ), + E_USER_DEPRECATED + ); + } + if (isset($attributes['also-load'])) { $mapping['alsoLoadFields'] = explode(',', $attributes['also-load']); } elseif (isset($attributes['version'])) { @@ -303,9 +321,18 @@ private function addEmbedMapping(MappingClassMetadata $class, $embed, $type) 'name' => (string) $attributes['field'], 'strategy' => isset($attributes['strategy']) ? (string) $attributes['strategy'] : $defaultStrategy, ); - if (isset($attributes['fieldName'])) { + + if (isset($attributes['field-name'])) { + $mapping['fieldName'] = (string) $attributes['field-name']; + } elseif (isset($attributes['fieldName'])) { $mapping['fieldName'] = (string) $attributes['fieldName']; + + @trigger_error( + sprintf('Field "%s" in class "%s" is mapped using a "fieldName" attribute which is deprecated. Use the "field-name" attribute instead.', $mapping['name'], $class->getName()), + E_USER_DEPRECATED + ); } + if (isset($embed->{'discriminator-field'})) { $attr = $embed->{'discriminator-field'}; $mapping['discriminatorField'] = (string) $attr['name']; @@ -355,9 +382,17 @@ private function addReferenceMapping(MappingClassMetadata $class, $reference, $t 'prime' => [], ); - if (isset($attributes['fieldName'])) { + if (isset($attributes['field-name'])) { + $mapping['fieldName'] = (string) $attributes['field-name']; + } elseif (isset($attributes['fieldName'])) { $mapping['fieldName'] = (string) $attributes['fieldName']; + + @trigger_error( + sprintf('Field "%s" in class "%s" is mapped using a "fieldName" attribute which is deprecated. Use the "field-name" attribute instead.', $mapping['name'], $class->getName()), + E_USER_DEPRECATED + ); } + if (isset($reference->{'discriminator-field'})) { $attr = $reference->{'discriminator-field'}; $mapping['discriminatorField'] = (string) $attr['name'];