class ComponentSectionFormHandler in Module Builder 8.3
Provides definitions of form sections, paths, titles, and properties used.
This entity handler processes the data in the component entity type definition's 'code_builder' annotation, and adds defaults. This data is then made available to various other things that build the UI, such as module_builder_entity_type_build() which sets up the form classes and link templates for the entity type, the route provider, entity list builder operations, and menu links.
The 'code_builder' annotation may define any number of sections to split the entity's edit form into. For each section, it defines the name, title strings, and which properties of the component should be shown in that form section. These sections are presented as tabs alongside the primary edit form. A 'misc' section is always added last, which shows any properties not included in the defined sections. The names of the sections correspond to form operations names, and setting a form class for that operation in the 'handlers' annotation will cause that form class to be used for that section. If no form class is given, the default \Drupal\module_builder\Form\ComponentSectionForm is used.
Note that this handler gets instantiated *three* times in a cache rebuild. One of the extra times is because module_builder_entity_type_build() calls createHandlerInstance() which doesn't use the entity handler static cache. The other appears to be some core weirdness.
Hierarchy
- class \Drupal\module_builder\EntityHandler\ComponentSectionFormHandler
Expanded class hierarchy of ComponentSectionFormHandler
File
- src/
EntityHandler/ ComponentSectionFormHandler.php, line 34
Namespace
Drupal\module_builder\EntityHandlerView source
class ComponentSectionFormHandler {
/**
* The form section data.
*
* @var array
*/
protected $formSectionData;
/**
* The form section data with the 'name' section removed.
*
* @var array
*/
protected $formSectionDataDynamic;
/**
* Constructs a new ComponentSectionFormHandler object.
*
* @param \Drupal\Core\Entity\EntityTypeInterface $entity_type
* The entity type definition.
*/
public function __construct(EntityTypeInterface $entity_type) {
$code_builder_annotation = $entity_type
->get('code_builder');
$form_properties = $code_builder_annotation['section_forms'];
if (!isset($form_properties['name'])) {
throw new \Exception("Entity type {$entity_type_id} defines the code_builder annotation, but doesn't have a name form set.");
}
// The 'misc' and 'generate' forms always gets added: the 'misc' shows all
// properties not set to another section..
$form_properties['misc'] = [
"title" => "Edit %label miscellaneous components",
"op_title" => "Edit miscellaneous components",
"tab_title" => "Misc",
// Empty array is needed here for getUsedComponentProperties() to use.
"properties" => [],
];
$form_properties['generate'] = [
"title" => "Generate code for %label",
"op_title" => "Generate code",
"tab_title" => "Generate code",
// Empty array is needed here for getUsedComponentProperties() to use.
"properties" => [],
];
$this->formSectionData = $form_properties;
// The 'name' form gets special treatment.
// TODO: currently hardcoded in the class.
// TODO: rename this class to a more generic name.
//$entity_type->setFormClass('name', \Drupal\module_builder\Form\ModuleNameForm::class);
unset($form_properties['name']);
$this->formSectionDataDynamic = $form_properties;
}
/**
* Gets the form operations defined by the component sections.
*
* @return string[]
* An array of form operation names.
*/
public function getFormOperations() {
$form_operations = array_keys($this->formSectionDataDynamic);
return $form_operations;
}
/**
* Gets the entity operations for the list builder.
*
* @return array
* An array whose keys are the form operation names, and whose values are
* labels for the operation links.
*/
public function getOperations() {
$op_data = [];
foreach ($this->formSectionDataDynamic as $form_op => $section) {
$route_data[$form_op] = $section['op_title'];
}
return $route_data;
}
/**
* Gets the route data for the section forms.
*
* @return array
* An array whose keys are the path components and values are route titles.
*/
public function getFormTabRoutePaths() {
$route_data = [];
foreach ($this->formSectionDataDynamic as $form_op => $section) {
$route_data[$form_op] = $section['title'];
}
return $route_data;
}
/**
* Gets the local tasks data for the section forms.
*
* @return array
* An array whose keys are the path components and values are task titles.
*/
public function getFormTabLocalTasksData() {
$route_data = [];
foreach ($this->formSectionDataDynamic as $form_op => $section) {
$route_data[$form_op] = $section['tab_title'];
}
return $route_data;
}
/**
* Gets the component properties to show for a section form.
*
* @param string $form_op
* The form operation name.
*
* @return string[]
* An array of property names for the component.
*/
public function getSectionFormComponentProperties($form_op) {
return $this->formSectionData[$form_op]['properties'];
}
/**
* Gets all the component properties set to show in section forms.
*
* @return string[]
* An array of property names for the component.
*/
public function getUsedComponentProperties() {
$used_component_properties = [];
foreach ($this->formSectionData as $form_op => $section_data) {
$used_component_properties = array_merge($used_component_properties, $section_data['properties']);
}
return $used_component_properties;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ComponentSectionFormHandler:: |
protected | property | The form section data. | |
ComponentSectionFormHandler:: |
protected | property | The form section data with the 'name' section removed. | |
ComponentSectionFormHandler:: |
public | function | Gets the form operations defined by the component sections. | |
ComponentSectionFormHandler:: |
public | function | Gets the local tasks data for the section forms. | |
ComponentSectionFormHandler:: |
public | function | Gets the route data for the section forms. | |
ComponentSectionFormHandler:: |
public | function | Gets the entity operations for the list builder. | |
ComponentSectionFormHandler:: |
public | function | Gets the component properties to show for a section form. | |
ComponentSectionFormHandler:: |
public | function | Gets all the component properties set to show in section forms. | |
ComponentSectionFormHandler:: |
public | function | Constructs a new ComponentSectionFormHandler object. |