123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- namespace Drupal\Core\Render\Element;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\Core\Render\Element;
- /**
- * Provides a form element for uploading a file.
- *
- * If you add this element to a form the enctype="multipart/form-data" attribute
- * will automatically be added to the form element.
- *
- * Properties:
- * - #multiple: A Boolean indicating whether multiple files may be uploaded.
- * - #size: The size of the file input element in characters.
- *
- * @FormElement("file")
- */
- class File extends FormElement {
- /**
- * {@inheritdoc}
- */
- public function getInfo() {
- $class = get_class($this);
- return [
- '#input' => 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;
- }
- }
|