UI Builders
Introduction
UI builders help you easily define complex UI structures from basic array configuration called definitions
for each component
of the UI object.
The builder
classes are responsible for taking your input and building a corresponding UI class and all it's components.
For example a form might have a field definition like this:
protected $fields = [
'name' => [
'type' => 'anomaly.field_type.text',
'label' => 'What is your name?',
],
];
Assuming the above is defined in our builder, we can build
and then access the resulting component object and use it.
$builder->build();
$builder->getFormField('name')->getInput();
// Outputs the field's input HTML
This is great because we didn't have to do much work to set this up. We can do even less if we leverage stream data (instead of defining the fields manually).
Builders
The builder classes are where your definitions go. You work with builders before the build process to configure the resulting UI objects.
During the build process the input from the builder is read, processed, and transferred to the builder's UI object. That's why the above example reaches into it's form for the finished object with getFormField
.
Models
Most builders use a model
. In most cases builders use a streams
model but they can be used with non-stream models as well as no model at all (self handling forms for example or tables of API data).
Components
Components comprise the primary structure of the builders.
Form builders for example have the following components:
- Fields
- Sections
- Actions
- Buttons
- Options
Definitions
Definitions are the basic array based configuration for components. Definition inputs are designed to require minimal input and maximum automation but can be defined in more detail to override anything.
Handlers
The build
process often leverages evaluation and resolving for all components. It's important to understand these concepts along with basic hydration going forward as this documentation will assume you are familiar with the concepts.
Handlers let you wrap the setting of component definitions into classes.
<?php namespace Anomaly\InstallerModule\Installer\Form;
class InstallerFormFields
{
public function handle(InstallerFormBuilder $builder)
{
$builder->setFields(...);
}
}