/** * Filters the item to keep only association related fields * * @param array $item * * @return array */ protected function filter(array $item) { $expectedFields = [$this->attrColumnsResolver->resolveIdentifierField(), 'associations']; foreach (array_keys($item) as $fieldName) { if (!in_array($fieldName, $expectedFields)) { unset($item[$fieldName]); } } return $item; }
/** * Filters the item to keep only association related fields * * @param array $item * * @return array */ protected function filter(array $item) { $requiredFields = $this->assocColumnsResolver->resolveAssociationColumns(); $requiredFields[] = $this->attrColumnsResolver->resolveIdentifierField(); foreach (array_keys($item) as $fieldName) { if (!in_array($fieldName, $requiredFields)) { unset($item[$fieldName]); } } return $item; }
/** * @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; }