/** * @param array $item * * @throws ArrayConversionException */ protected function validateOptionalFields(array $item) { $optionalFields = array_merge(['family', 'enabled', 'categories', 'groups'], $this->attrColumnsResolver->resolveAttributeColumns(), $this->getOptionalAssociationFields()); $unknownFields = []; foreach (array_keys($item) as $field) { if (!in_array($field, $optionalFields)) { $unknownFields[] = $field; } } if (0 < count($unknownFields)) { $message = count($unknownFields) > 1 ? 'The fields "%s" do not exist' : 'The field "%s" does not exist'; throw new ArrayConversionException(sprintf($message, implode(', ', $unknownFields))); } }
/** * @return OptionsResolverInterface */ protected function createOptionsResolver() { $resolver = new OptionsResolver(); $required = []; $allowedTypes = ['family' => 'string', 'enabled' => 'bool', 'categories' => 'string', 'groups' => 'string']; $optional = array_merge(['family', 'enabled', 'categories', 'groups'], $this->attrColumnsResolver->resolveAttributeColumns(), $this->getOptionalAssociationFields()); $resolver->setRequired($required); $resolver->setOptional($optional); $resolver->setAllowedTypes($allowedTypes); $booleanNormalizer = function ($options, $value) { return (bool) $value; }; $resolver->setNormalizers(['enabled' => $booleanNormalizer]); return $resolver; }