name: AbstractNormalizer class_comment: null dependencies: - name: CircularReferenceException type: class source: Symfony\Component\Serializer\Exception\CircularReferenceException - name: InvalidArgumentException type: class source: Symfony\Component\Serializer\Exception\InvalidArgumentException - name: LogicException type: class source: Symfony\Component\Serializer\Exception\LogicException - name: MissingConstructorArgumentsException type: class source: Symfony\Component\Serializer\Exception\MissingConstructorArgumentsException - name: NotNormalizableValueException type: class source: Symfony\Component\Serializer\Exception\NotNormalizableValueException - name: RuntimeException type: class source: Symfony\Component\Serializer\Exception\RuntimeException - name: AttributeMetadataInterface type: class source: Symfony\Component\Serializer\Mapping\AttributeMetadataInterface - name: ClassMetadataFactoryInterface type: class source: Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface - name: NameConverterInterface type: class source: Symfony\Component\Serializer\NameConverter\NameConverterInterface - name: SerializerAwareInterface type: class source: Symfony\Component\Serializer\SerializerAwareInterface - name: SerializerAwareTrait type: class source: Symfony\Component\Serializer\SerializerAwareTrait - name: ObjectToPopulateTrait type: class source: ObjectToPopulateTrait - name: SerializerAwareTrait type: class source: SerializerAwareTrait properties: [] methods: - name: __construct visibility: public parameters: - name: classMetadataFactory default: 'null' - name: nameConverter default: 'null' - name: defaultContext default: '[]' comment: "# * Normalizer implementation.\n# *\n# * @author K\xE9vin Dunglas \n\ # */\n# abstract class AbstractNormalizer implements NormalizerInterface, DenormalizerInterface,\ \ SerializerAwareInterface\n# {\n# use ObjectToPopulateTrait;\n# use SerializerAwareTrait;\n\ # \n# /* constants to configure the context */\n# \n# /**\n# * How many loops\ \ of circular reference to allow while normalizing.\n# *\n# * The default value\ \ of 1 means that when we encounter the same object a\n# * second time, we consider\ \ that a circular reference.\n# *\n# * You can raise this value for special cases,\ \ e.g. in combination with the\n# * max depth setting of the object normalizer.\n\ # */\n# public const CIRCULAR_REFERENCE_LIMIT = 'circular_reference_limit';\n\ # \n# /**\n# * Instead of creating a new instance of an object, update the specified\ \ object.\n# *\n# * If you have a nested structure, child objects will be overwritten\ \ with\n# * new instances unless you set DEEP_OBJECT_TO_POPULATE to true.\n# */\n\ # public const OBJECT_TO_POPULATE = 'object_to_populate';\n# \n# /**\n# * Only\ \ (de)normalize attributes that are in the specified groups.\n# */\n# public const\ \ GROUPS = 'groups';\n# \n# /**\n# * Limit (de)normalize to the specified names.\n\ # *\n# * For nested structures, this list needs to reflect the object tree.\n\ # */\n# public const ATTRIBUTES = 'attributes';\n# \n# /**\n# * If ATTRIBUTES\ \ are specified, and the source has fields that are not part of that list,\n#\ \ * either ignore those attributes (true) or throw an ExtraAttributesException\ \ (false).\n# */\n# public const ALLOW_EXTRA_ATTRIBUTES = 'allow_extra_attributes';\n\ # \n# /**\n# * Hashmap of default values for constructor arguments.\n# *\n# *\ \ The names need to match the parameter names in the constructor arguments.\n\ # */\n# public const DEFAULT_CONSTRUCTOR_ARGUMENTS = 'default_constructor_arguments';\n\ # \n# /**\n# * Hashmap of field name => callable to (de)normalize this field.\n\ # *\n# * The callable is called if the field is encountered with the arguments:\n\ # *\n# * - mixed $attributeValue value of this field\n# * - object|string\ \ $object the whole object being normalized or the object's class being\ \ denormalized\n# * - string $attributeName name of the attribute being\ \ (de)normalized\n# * - string $format the requested format\n#\ \ * - array $context the serialization context\n# */\n# public\ \ const CALLBACKS = 'callbacks';\n# \n# /**\n# * Handler to call when a circular\ \ reference has been detected.\n# *\n# * If you specify no handler, a CircularReferenceException\ \ is thrown.\n# *\n# * The method will be called with ($object, $format, $context)\ \ and its\n# * return value is returned as the result of the normalize call.\n\ # */\n# public const CIRCULAR_REFERENCE_HANDLER = 'circular_reference_handler';\n\ # \n# /**\n# * Skip the specified attributes when normalizing an object tree.\n\ # *\n# * This list is applied to each element of nested structures.\n# *\n# *\ \ Note: The behaviour for nested structures is different from ATTRIBUTES\n# *\ \ for historical reason. Aligning the behaviour would be a BC break.\n# */\n#\ \ public const IGNORED_ATTRIBUTES = 'ignored_attributes';\n# \n# /**\n# * Require\ \ all properties to be listed in the input instead of falling\n# * back to null\ \ for nullable ones.\n# */\n# public const REQUIRE_ALL_PROPERTIES = 'require_all_properties';\n\ # \n# /**\n# * Flag to control whether a non-boolean value should be filtered\ \ using the\n# * filter_var function with the {@see https://www.php.net/manual/fr/filter.filters.validate.php}\n\ # * \\FILTER_VALIDATE_BOOL filter before casting it to a boolean.\n# *\n# * \"\ 0\", \"false\", \"off\", \"no\" and \"\" will be cast to false.\n# * \"1\", \"\ true\", \"on\" and \"yes\" will be cast to true.\n# */\n# public const FILTER_BOOL\ \ = 'filter_bool';\n# \n# /**\n# * @internal\n# */\n# protected const CIRCULAR_REFERENCE_LIMIT_COUNTERS\ \ = 'circular_reference_limit_counters';\n# \n# protected array $defaultContext\ \ = [\n# self::ALLOW_EXTRA_ATTRIBUTES => true,\n# self::CIRCULAR_REFERENCE_HANDLER\ \ => null,\n# self::CIRCULAR_REFERENCE_LIMIT => 1,\n# self::IGNORED_ATTRIBUTES\ \ => [],\n# ];\n# \n# /**\n# * Sets the {@link ClassMetadataFactoryInterface}\ \ to use." - name: isCircularReference visibility: protected parameters: - name: object - name: '&$context' comment: '# * Detects if the configured circular reference limit is reached. # * # * @throws CircularReferenceException' - name: handleCircularReference visibility: protected parameters: - name: object - name: format default: 'null' - name: context default: '[]' comment: '# * Handles a circular reference. # * # * If a circular reference handler is set, it will be called. Otherwise, a # * {@class CircularReferenceException} will be thrown. # * # * @final # * # * @throws CircularReferenceException' - name: getAllowedAttributes visibility: protected parameters: - name: classOrObject - name: context - name: attributesAsString default: 'false' comment: '# * Gets attributes to normalize using groups. # * # * @param bool $attributesAsString If false, return an array of {@link AttributeMetadataInterface} # * # * @return string[]|AttributeMetadataInterface[]|bool # * # * @throws LogicException if the ''allow_extra_attributes'' context variable is false and no class metadata factory is provided' - name: getGroups visibility: protected parameters: - name: context comment: null - name: isAllowedAttribute visibility: protected parameters: - name: classOrObject - name: attribute - name: format default: 'null' - name: context default: '[]' comment: '# * Is this attribute allowed?' - name: prepareForDenormalization visibility: protected parameters: - name: data comment: '# * Normalizes the given data to an array. It''s particularly useful during # * the denormalization process.' - name: getConstructor visibility: protected parameters: - name: '&$data' - name: class - name: '&$context' - name: reflectionClass - name: allowedAttributes comment: '# * Returns the method to use to construct an object. This method must be either # * the object constructor or static.' - name: instantiateObject visibility: protected parameters: - name: '&$data' - name: class - name: '&$context' - name: reflectionClass - name: allowedAttributes - name: format default: 'null' comment: '# * Instantiates an object using constructor parameters when needed. # * # * This method also allows to denormalize data into an existing object if # * it is present in the context with the object_to_populate. This object # * is removed from the context before being returned to avoid side effects # * when recursively normalizing an object graph. # * # * @throws RuntimeException # * @throws MissingConstructorArgumentsException' - name: denormalizeParameter visibility: protected parameters: - name: class - name: parameter - name: parameterName - name: parameterData - name: context - name: format default: 'null' comment: '# * @internal' - name: createChildContext visibility: protected parameters: - name: parentContext - name: attribute - name: format comment: '# * @internal' - name: getAttributeNormalizationContext visibility: protected parameters: - name: object - name: attribute - name: context comment: "# * Validate callbacks set in context.\n# *\n# * @param string $contextType\ \ Used to specify which context is invalid in exceptions\n# *\n# * @throws InvalidArgumentException\n\ # */\n# final protected function validateCallbackContext(array $context, string\ \ $contextType = ''): void\n# {\n# if (!isset($context[self::CALLBACKS])) {\n\ # return;\n# }\n# \n# if (!\\is_array($context[self::CALLBACKS])) {\n# throw new\ \ InvalidArgumentException(\\sprintf('The \"%s\"%s context option must be an array\ \ of callables.', self::CALLBACKS, '' !== $contextType ? \" $contextType\" : ''));\n\ # }\n# \n# foreach ($context[self::CALLBACKS] as $attribute => $callback) {\n\ # if (!\\is_callable($callback)) {\n# throw new InvalidArgumentException(\\sprintf('Invalid\ \ callback found for attribute \"%s\" in the \"%s\"%s context option.', $attribute,\ \ self::CALLBACKS, '' !== $contextType ? \" $contextType\" : ''));\n# }\n# }\n\ # }\n# \n# final protected function applyCallbacks(mixed $value, object|string\ \ $object, string $attribute, ?string $format, array $context): mixed\n# {\n#\ \ /**\n# * @var callable|null\n# */\n# $callback = $context[self::CALLBACKS][$attribute]\ \ ?? $this->defaultContext[self::CALLBACKS][$attribute] ?? null;\n# \n# return\ \ $callback ? $callback($value, $object, $attribute, $format, $context) : $value;\n\ # }\n# \n# final protected function applyFilterBool(\\ReflectionParameter $parameter,\ \ mixed $value, array $context): mixed\n# {\n# if (!($context[self::FILTER_BOOL]\ \ ?? false)) {\n# return $value;\n# }\n# \n# if (!($parameterType = $parameter->getType())\ \ instanceof \\ReflectionNamedType || 'bool' !== $parameterType->getName()) {\n\ # return $value;\n# }\n# \n# return filter_var($value, \\FILTER_VALIDATE_BOOL,\ \ \\FILTER_NULL_ON_FAILURE) ?? $value;\n# }\n# \n# /**\n# * Computes the normalization\ \ context merged with current one. Metadata always wins over global context, as\ \ more specific.\n# *\n# * @internal" - name: getAttributeDenormalizationContext visibility: protected parameters: - name: class - name: attribute - name: context comment: '# * Computes the denormalization context merged with current one. Metadata always wins over global context, as more specific. # * # * @internal' - name: getAttributeMetadata visibility: protected parameters: - name: objectOrClass - name: attribute comment: '# * @internal' traits: - Symfony\Component\Serializer\Exception\CircularReferenceException - Symfony\Component\Serializer\Exception\InvalidArgumentException - Symfony\Component\Serializer\Exception\LogicException - Symfony\Component\Serializer\Exception\MissingConstructorArgumentsException - Symfony\Component\Serializer\Exception\NotNormalizableValueException - Symfony\Component\Serializer\Exception\RuntimeException - Symfony\Component\Serializer\Mapping\AttributeMetadataInterface - Symfony\Component\Serializer\Mapping\Factory\ClassMetadataFactoryInterface - Symfony\Component\Serializer\NameConverter\NameConverterInterface - Symfony\Component\Serializer\SerializerAwareInterface - Symfony\Component\Serializer\SerializerAwareTrait - ObjectToPopulateTrait - SerializerAwareTrait interfaces: - NormalizerInterface