TRUE, '#multiple' => FALSE, '#process' => [ [$class, 'processFile'], ], '#size' => 60, '#pre_render' => [ [$class, 'preRenderFile'], ], '#theme' => 'input__file', '#theme_wrappers' => ['form_element'], ]; } /** * Processes a file upload element, make use of #multiple if present. */ public static function processFile(&$element, FormStateInterface $form_state, &$complete_form) { if ($element['#multiple']) { $element['#attributes'] = ['multiple' => 'multiple']; $element['#name'] .= '[]'; } return $element; } /** * Prepares a #type 'file' render element for input.html.twig. * * For assistance with handling the uploaded file correctly, see the API * provided by file.inc. * * @param array $element * An associative array containing the properties of the element. * Properties used: #title, #name, #size, #description, #required, * #attributes. * * @return array * The $element with prepared variables ready for input.html.twig. */ public static function preRenderFile($element) { $element['#attributes']['type'] = 'file'; Element::setAttributes($element, ['id', 'name', 'size']); static::setAttributes($element, ['js-form-file', 'form-file']); return $element; } }