function RecipeInputFormTrait::buildRecipeInputForm
Generates a tree of form elements for a recipe's inputs.
Parameters
\Drupal\Core\Recipe\Recipe $recipe: A recipe.
Return value
array[] A nested array of form elements for collecting input values for the given recipe and its dependencies. The elements will be grouped by the recipe that defined the input -- for example, $return['recipe_name']['input1'], $return['recipe_name']['input2'], $return['dependency']['input_name'], and so forth. The returned array will have the `#tree` property set to TRUE.
1 call to RecipeInputFormTrait::buildRecipeInputForm()
- FormTestRecipeInputForm::buildForm in core/
modules/ system/ tests/ modules/ form_test/ src/ Form/ FormTestRecipeInputForm.php - Form constructor.
File
-
core/
lib/ Drupal/ Core/ Recipe/ RecipeInputFormTrait.php, line 32
Class
- RecipeInputFormTrait
- Defines helper methods for forms which collect input on behalf of recipes.
Namespace
Drupal\Core\RecipeCode
protected function buildRecipeInputForm(Recipe $recipe) : array {
$collector = new class implements InputCollectorInterface {
/**
* A form array containing the input elements for the given recipe.
*
* This will be a tree of input elements, grouped by the name of the
* recipe that defines them. For example:
*
* @code
* $form = [
* 'recipe_1' => [
* 'input_1' => [
* '#type' => 'textfield',
* '#title' => 'Some input value',
* ],
* 'input_2' => [
* '#type' => 'checkbox',
* '#title' => 'Enable some feature or other?',
* ],
* ],
* 'dependency_recipe' => [
* 'input_1' => [
* '#type' => 'textarea',
* '#title' => 'An input defined by a dependency of recipe_1',
* ],
* ],
* '#tree' => TRUE,
* ];
* @endcode
*
* The `#tree` property will always be set to TRUE.
*
* @var array
*/
// phpcs:ignore DrupalPractice.CodeAnalysis.VariableAnalysis.UnusedVariable
public array $form = [];
/**
* {@inheritdoc}
*/
public function collectValue(string $name, DataDefinitionInterface $definition, mixed $default_value) : mixed {
$element = $definition->getSetting('form');
if ($element) {
$element += [
'#description' => $definition->getDescription(),
'#default_value' => $default_value,
'#type' => 'value',
];
// Recipe inputs are required by default, unless they are single
// checkboxes, in which case the `#required` behavior doesn't make
// a lot of sense because it forces the user to check the box.
$element['#required'] ??= $element['#type'] !== 'checkbox';
NestedArray::setValue($this->form, explode('.', $name, 2), $element);
// Always return the input elements as a tree.
$this->form['#tree'] = TRUE;
}
return $default_value;
}
};
$recipe->input
->collectAll($collector);
return $collector->form;
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.