sunnyflail / forms
A simple Form abstraction API
Requires
- sunnyflail/assoc_shift: 1.0.0
- sunnyflail/constraints: ^1.0
- sunnyflail/html-abstraction: ^1.1.6
- sunnyflail/object-creator: ^1.0
Requires (Dev)
- dev-main
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.1
- 1.5.0
- 1.4.9
- 1.4.8
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.5
- 1.3.4
- 1.3.3
- 1.3.2
- 1.3.1
- 1.3
- 1.2.9
- 1.2.8
- 1.2.7
- 1.2.6
- 1.2.5
- 1.2.4
- 1.2.3
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.19
- 1.1.18
- 1.1.17
- 1.1.16
- 1.1.15
- 1.1.14
- 1.1.13
- 1.1.12
- 1.1.11
- 1.1.10
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.0
This package is auto-updated.
Last update: 2025-04-04 19:28:33 UTC
README
A simple Form Abstraction layer
1 Creating forms
First create a class extending SunnyFlail\Forms\Form\FormElement
class.
It must implement method IFormElement::build
.
use SunnyFlail\Forms\Form\FormElement; use SunnyFlail\Forms\Interfaces\IFormBuilder; class ConcreteForm extends FormElement { public function build(IFormBuilder $builder) { (...) } }
1.1 Adding Fields
Inside the IFormElement::build
method invoke IFormBuilder::add
, providing the field you want to add as an argument. You can chain this method.
$builder->add(new InputField('text'));
1.2 Configuring form
Inside the `` method you can change properties
(Mandatory) string $formName
- Name of the form - prefix which will be provided to form's field names
`string $formMethod` - HTTP method which this form will use (defaults to GET)
`string $buttonText` - Text which will be shown inside the submit button
`array $attributes` - Atttributes to be provided to the form Element
`array buttonAttributes` - Attributes provided to submit button Element of the form
`IElement[] $topElements`- Array of objects implementing `SunnyFlail\HtmlAbstraction\Interfaces\IElement` interface - Elements to be printed before all fields
`IElement[] $middleElements` - Array of objects implementing `SunnyFlail\HtmlAbstraction\Interfaces\IElement` interface - Elements to be printed before after fields, before button
`IElement[] $bottomElements` - Array of objects implementing `SunnyFlail\HtmlAbstraction\Interfaces\IElement` interface - Elements to be printed after submit button
`string|null $classFQCN` - FQCN of (Plain Old Php Object) class to which this form will resolve to, resolves to array if this is null
`bool $useHtmlValidation` - Should this form use Html Validation (defaults to true)
`bool $withFiles` If set to true sets the enctype (encoding type) to multipart/form-data
2 Using forms
2.1 Creating builder
First you need to create a global copy of form builder
$objectCreator = new SunnyFlail\ObjectCreator\ObjectCreator(); $valueMapper = new SunnyFlail\Forms\Mappers\ValueMapper($objectCreator); $valueProviderFactory = new SunnyFlail\Forms\Providers\ProviderFactory(); $builder = new SunnyFlail\Forms\Form\FormBuilder($valueMapper, $valueProviderFactory);
2.2 Building form
Then invoke IFormBuilder::buildForm
method providing form FQCN as first argument, and optionally object/array to scrape values from as second.
This returns a copy of Builder so prepare another variable for it
$concreteFormBuilder = $builder->buildForm(ConcreteForm::class);
2.3 Processing user input
To process user provided data invoke IFormBuilder::processForm
using a object implementing Psr\Http\Message\ServerRequestInterface
interface as an argument
This will return a bool indicating whether form got valid values
if ($concreteFormBuilder->processForm($request)) { (...) }
2.4 Getting values
To get values scraped from form elements use IFormBuilder::getProcessedData
$values = $concreteFormBuilder->getProcessedData();
2.5 Adding errors
To add en error to form use IFormBuilder::addError
$concreteFormBuilder->addError('An error occurred!');
2.6 Rendering form
You can either just stringify (eg. echo $concreteFormBuilder;
) the form OR manually render all of the fields.
To render the form manually, first you need to get a copy of Form by calling IFormBuilder::accessForm
To get HTML form tag attributes call IFormElement::getHTMLAttributes
To get an associative array of fields call IFormElement::getFields
To get Fields Input element call IField::getInputElement
To get Fields Label element call IField::getLabelElement
Those methods may return an IElement OR and array of them
If an error occured you can get the error element with IField::getErrorElement
3 Available fields
3.1 InputField
This is representation of <input type="(...)">
$input = new SunnyFlail\Forms\Fields\InputField();
Input field constructor takes parameters:
string $name
- Name of the field
string $type
- Field type
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
IConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
IElement[] $topElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before label
IElement[] $middleElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before input
IElement[] $bottomElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before error
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
?string $labelText
- Text to be shown inside label, if unset it shows the field name
array $labelAttributes
- Array of html attributes to be provided to label Element
3.2 EmailField
This is representation of <input type="email">
$input = new SunnyFlail\Forms\Fields\EmailField();
Email field constructor takes parameters
string $name
- Name of the field
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
IElement[] $topElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before label
IElement[] $middleElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before input
IElement[] $bottomElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before error
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
?string $labelText
- Text to be shown inside label, if unset it shows the field name
array $labelAttributes
- Array of html attributes to be provided to label Element
3.3 PasswordField
This is representation of <input type="password">
$input = new SunnyFlail\Forms\Fields\PasswordField();
This field introduces Peeper
- a button which, when coupled with appriopriate JS, shows the password provided to the field
Password field constructor takes parameters:
string $name
- Name of the field
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
IConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
IElement[] $topElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before label
IElement[] $middleElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before input
IElement[] $bottomElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before error
bool $withPeeper
- Whether this field should be rendered with an peeper
array $inputAttributes
- Array of html attributes to be provided to input Element
array $peeperAttributes
- Array of html attributes to be provided to peeper Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
?string $labelText
- Text to be shown inside label, if unset it shows the field name
array $labelAttributes
- Array of html attributes to be provided to label Element
3.4 TextAreaField
This is representation of <textarea></textarea>
$input = new SunnyFlail\Forms\Fields\TextAreaField();
TextArea field constructor takes parameters:
string $name
- Name of the field
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
IConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
IElement[] $topElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before label
IElement[] $middleElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before input
IElement[] $bottomElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before error
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
?string $labelText
- Text to be shown inside label, if unset it shows the field name
array $labelAttributes
- Array of html attributes to be provided to label Element
3.5 SelectField
This is representation of <select>(...)</select>
$input = new SunnyFlail\Forms\Fields\SelectField();
Select field constructor takes parameters:
string $name
- Name of the field
array $options
- Options to render -
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
bool $multiple
- Should this field allow multiple values
bool $useIntristicValues
- Should this only check for values provided in $options parameter or should accept any value matching provided constraints
IConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
IElement[] $topElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before label
IElement[] $middleElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before input
IElement[] $bottomElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before error
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
?string $labelText
- Text to be shown inside label, if unset it shows the field name
array $optionAttributes
- Array of html attributes to be provided to option Element
array $labelAttributes
- Array of html attributes to be provided to label Element
3.6 CheckBoxGroupField
This is representation of a group of <input type="checkbox">
$input = new SunnyFlail\Forms\Fields\CheckBoxGroupField();
Checkbox field constructor takes parameters:
string $name
- Name of the field
array $options
- Options to render -
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
bool $multiple
- Should this field allow multiple values
bool $useIntristicValues
- Should this only check for values provided in $options parameter or should accept any value matching provided constraints
IConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
array $labelAttributes
- Array of html attributes to be provided to label Element
3.7 RadioGroupField
This is representation of a group of <input type="radio">
$input = new SunnyFlail\Forms\Fields\RadioGroupField();
Radio field constructor takes parameters:
string $name
- Name of the field
array $options
- Options to render -
bool $required
- Whether this field must be filled
bool $rememberValue
- Whether this field should retain provided value of error
bool $useIntristicValues
- Should this only check for values provided in $options parameter or should accept any value matching provided constraints
IConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
array $labelAttributes
- Array of html attributes to be provided to label Element
3.8 RepeatedInputField
A field containing two fields whose values must be the same
$input = new SunnyFlail\Forms\Fields\RepeatedInputField();
Repeated field constructor takes parameters:
IInputField $field
- First field
IInputField $repeatedField
- Repeated field
string $missmatchError
- Message to be displayed on error
3.9 ClassMappedField
A group of fields whose values will be mapped to an Plain Old Php Object
$input = new SunnyFlail\Forms\Fields\ClassMappedField();
Class mapping field constructor takes parameters:
string $fieldName
- Name of the field
string $classFQCN
- Class name
IField ...$fields
- Fields with names defaulting to Class property names
3.10 FileUploadField
This is representation of <input type="file">
File upload field constructor takes parameters:
string $name
- Name of the field
bool $required
- Whether this field must be filled
bool $multiple
- Should this field allow multiple values
IFileConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IFileConstraint
interface
IElement[] $topElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before label
IElement[] $middleElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before input
IElement[] $bottomElements
- Array of objects implementing SunnyFlail\HtmlAbstraction\Interfaces\IElement
interface - Elements to be printed before error
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
?string $labelText
- Text to be shown inside label, if unset it shows the field name
array $labelAttributes
- Array of html attributes to be provided to label Element
bool $terminateOnError
- Whether http upload error of one of the files should make this field invalid
3.11 FileUploadGroupField [from version ^1.3]
File upload field constructor takes parameters:
string $name
- Name of the field
int $inputCount
- How many inputs should this render - must be at least 1, if set to 1 this fields multiple property is set to false
int $required
- Minimal number of required files
IFileConstraint[] $constraints
- Array of objects implementing SunnyFlail\Constraints\Interfaces\IFileConstraint
interface
array $errorMessages
- Array of strings, keys must be numeric strings, '-1' is for no value error, positive keys are for failed constraint errors
string[] $labelTexts
- Text to be shown inside label, If set must be an incremental array with same amout of keys as set in $inputCount, otherwise shows numbers
array $inputAttributes
- Array of html attributes to be provided to input Element
array $containerAttributes
- Array of html attributes to be provided to wrapper Element
array $errorAttributes
- Array of html attributes to be provided to error Element
array $labelAttributes
- Array of html attributes to be provided to label Element
bool $terminateOnError
- Whether http upload error of one of the files should make this field invalid
4 TODO
I need to add an IFormBuilder::getRawValues
which would return an associative array of raw values provided to fields