Skip to content

File and image field kits

Kits in src/Kits/Field/Media/. There are two FileKit classes: Media\FileKit is the plain file input ($kits->fileUnmanaged()), and Media\ManagedFile\FileKit is the managed_file element. Managed file kits store upload validators as validator kits keyed by callback name and turn them into #upload_validators when built.

Upload validator keys on Drupal 10.2+ and 11

The validator kits use the legacy callback names file_validate_size, file_validate_extensions and file_validate_image_resolution as #upload_validators keys. Since Drupal 10.2, core expects validation constraint plugin IDs there (FileSizeLimit, FileExtension, FileImageDimensions). In Drupal 11, Drupal\file\Validation\FileValidator::validate() passes every key straight to the constraint plugin manager, which has no plugin with the legacy names, so expect upload validation through these kits to fail on Drupal 11. No test in this repository exercises an upload. Until this is fixed, overwrite the property on the built array, for example $form['upload']['#upload_validators'] = ['FileExtension' => ['extensions' => 'png jpg']]; after getForm(). Setting it on the kit with set() does not work, because FileKit::getArray() calls getArray() on every entry of #upload_validators.

Media\FileKit

A plain file input (no file entity is created).

Class Drupal\formfactorykits\Kits\Field\Media\FileKit (src/Kits/Field/Media/FileKit.php)
Extends FieldKit
Factory method $kits->fileUnmanaged()
Form API #type file
Default ID file
Traits DefaultValueTrait, DescriptionTrait, MultipleTrait, PrefixTrait, SizeTrait, SuffixTrait, TitleTrait, ValueTrait

Setters

Method From
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setDescription(string $description) DescriptionTrait (trait)
setMultiple(bool $isMultiple = TRUE) MultipleTrait (trait)
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setSize(int $size) SizeTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setTitle(string $title) TitleTrait (trait)
setValue(array\|string\|null $value) ValueTrait (trait)

Example

$kit = $kits->fileUnmanaged('attachment')->setTitle('Attachment')->setMultiple();

Generated render array ([$kit->getID() => $kit->getArray()])

[
  'attachment' => [
    '#type' => 'file',
    '#title' => 'Attachment',
    '#multiple' => TRUE,
  ],
]

ManagedFile\FileKit

A managed_file element.

Class Drupal\formfactorykits\Kits\Field\Media\ManagedFile\FileKit (src/Kits/Field/Media/ManagedFile/FileKit.php)
Extends FieldKit
Factory method $kits->file()
Form API #type managed_file
Default ID managed_file
Traits DefaultValueTrait, DescriptionTrait, MultipleTrait, PrefixTrait, RequiredTrait, SuffixTrait, TitleTrait, ValueTrait

Setters

Method From
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setDescription(string $description) DescriptionTrait (trait)
setMaxFileSize(int $bytes) FileKit
setMultiple(bool $isMultiple = TRUE) MultipleTrait (trait)
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setRequired(bool $required = TRUE) RequiredTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setTitle(string $title) TitleTrait (trait)
setUploadLocation(string $location) FileKit
setUploadValidator(Drupal\formfactorykits\Kits\Field\Media\ManagedFile\UploadValidators\UploadValidatorKit $validator) FileKit
setValue(array\|string\|null $value) ValueTrait (trait)

$kits->file() is broken in the current release

FormFactoryKitsService::file() calls FileKit::create() without importing the class, so it throws Error: Class "Drupal\formfactorykits\Services\FileKit" not found. Create the kit directly, as in the example below.

Example

$kit = \Drupal\formfactorykits\Kits\Field\Media\ManagedFile\FileKit::create($kits, 'upload')->setTitle('Upload')->setUploadLocation('public://uploads')->setMaxFileSize(1048576);

Generated render array ([$kit->getID() => $kit->getArray()])

[
  'upload' => [
    '#type' => 'managed_file',
    '#title' => 'Upload',
    '#upload_location' => 'public://uploads',
    '#upload_validators' => [
      'file_validate_size' => ['1048576'],
    ],
  ],
]

ImageKit

A managed_file element for images. The constructor sets #theme => image_widget, #preview_image_style => medium, a 5 MB size validator and a png/gif/jpg/jpeg extension validator.

Class Drupal\formfactorykits\Kits\Field\Media\ManagedFile\ImageKit (src/Kits/Field/Media/ManagedFile/ImageKit.php)
Extends FileKit
Factory method $kits->image()
Form API #type managed_file
Default ID managed_image
Traits DefaultValueTrait, DescriptionTrait, MultipleTrait, PrefixTrait, RequiredTrait, SuffixTrait, ThemeTrait, TitleTrait, ValueTrait

Setters

Method From
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setDescription(string $description) DescriptionTrait (trait)
setMaxFileSize(int $bytes) FileKit
setMaxResolution(int $width, int $height) ImageKit
setMultiple(bool $isMultiple = TRUE) MultipleTrait (trait)
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setPreviewImageStyle(string $style) ImageKit
setRequired(bool $required = TRUE) RequiredTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setTheme(string $theme) ThemeTrait (trait)
setTitle(string $title) TitleTrait (trait)
setUploadLocation(string $location) FileKit
setUploadValidator(Drupal\formfactorykits\Kits\Field\Media\ManagedFile\UploadValidators\UploadValidatorKit $validator) FileKit
setValidExtensions(array $extensions) ImageKit
setValue(array\|string\|null $value) ValueTrait (trait)

Example

$kit = $kits->image('photo')->setTitle('Photo')->setMaxResolution(1200, 800);

Generated render array ([$kit->getID() => $kit->getArray()])

[
  'photo' => [
    '#type' => 'managed_file',
    '#theme' => 'image_widget',
    '#preview_image_style' => 'medium',
    '#upload_validators' => [
      'file_validate_size' => ['5242880'],
      'file_validate_extensions' => ['png gif jpg jpeg'],
      'file_validate_image_resolution' => ['1200x800'],
    ],
    '#title' => 'Photo',
  ],
]

UploadValidatorKit

Base class for upload validators. getArray() returns the validator's callback arguments, which become the value under its callback key in #upload_validators.

Class Drupal\formfactorykits\Kits\Field\Media\ManagedFile\UploadValidators\UploadValidatorKit (src/Kits/Field/Media/ManagedFile/UploadValidators/UploadValidatorKit.php)
Extends FieldKit
Factory method $kits->uploadValidator()
Form API #type none (returns callback arguments)
Default ID none (pass one)
Traits DefaultValueTrait, PrefixTrait, SuffixTrait, ValueTrait

Setters

Method From
setCallbackArguments(array $args = []) UploadValidatorKit
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setValue(array\|string\|null $value) ValueTrait (trait)

Example

$kit = $kits->uploadValidator('custom')->setCallbackArguments(['a']);

Generated render array ([$kit->getID() => $kit->getArray()])

[
  'custom' => ['a'],
]

FileSizeUploadValidatorKit

Callback key file_validate_size; default size 5242880 bytes.

Class Drupal\formfactorykits\Kits\Field\Media\ManagedFile\UploadValidators\FileSizeUploadValidatorKit (src/Kits/Field/Media/ManagedFile/UploadValidators/FileSizeUploadValidatorKit.php)
Extends UploadValidatorKit
Factory method none; use FileKit::setMaxFileSize()
Form API #type none
Default ID none (pass one)
Traits DefaultValueTrait, PrefixTrait, SuffixTrait, ValueTrait

Setters

Method From
setCallbackArguments(array $args = []) UploadValidatorKit
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setFileSize(int $size) FileSizeUploadValidatorKit
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setValue(array\|string\|null $value) ValueTrait (trait)

ImageExtensionUploadValidatorKit

Callback key file_validate_extensions; default extensions png, gif, jpg, jpeg.

Class Drupal\formfactorykits\Kits\Field\Media\ManagedFile\UploadValidators\ImageExtensionUploadValidatorKit (src/Kits/Field/Media/ManagedFile/UploadValidators/ImageExtensionUploadValidatorKit.php)
Extends UploadValidatorKit
Factory method none; use ImageKit::setValidExtensions()
Form API #type none
Default ID none (pass one)
Traits DefaultValueTrait, PrefixTrait, SuffixTrait, ValueTrait

Setters

Method From
appendExtension($ext) ImageExtensionUploadValidatorKit
setCallbackArguments(array $args = []) UploadValidatorKit
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setExtensions(array $extensions = []) ImageExtensionUploadValidatorKit
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setValue(array\|string\|null $value) ValueTrait (trait)

ImageResolutionUploadValidatorKit

Callback key file_validate_image_resolution; argument "<width>x<height>".

Class Drupal\formfactorykits\Kits\Field\Media\ManagedFile\UploadValidators\ImageResolutionUploadValidatorKit (src/Kits/Field/Media/ManagedFile/UploadValidators/ImageResolutionUploadValidatorKit.php)
Extends UploadValidatorKit
Factory method none; use ImageKit::setMaxResolution()
Form API #type none
Default ID none (pass one)
Traits DefaultValueTrait, PrefixTrait, SuffixTrait, ValueTrait

Setters

Method From
setCallbackArguments(array $args = []) UploadValidatorKit
setDefaultValue(array\|string\|null $value) DefaultValueTrait (trait)
setMaxHeight(int $maxHeight) ImageResolutionUploadValidatorKit
setMaxWidth(int $maxWidth) ImageResolutionUploadValidatorKit
setPrefix(array\|string\|null $value) PrefixTrait (trait)
setSuffix(array\|string\|null $value) SuffixTrait (trait)
setValue(array\|string\|null $value) ValueTrait (trait)