HTML Forms: Generate and validate submitted HTML forms

Recommend this page to a friend!
  Info   Documentation   View files (88)   Download .zip   Reputation   Support forum (1)   Blog    
Ratings Unique User Downloads Download Rankings
Not enough user ratingsTotal: 188 All time: 8,419 This week: 268
Version License PHP version Categories
delboy1978uk-form 1.0.0MIT/X Consortium ...5HTML, PHP 5, Validation
Description Author

This package can generate and validate submitted HTML forms.

It provides several classes that abstract each type of form field and can create form field objects that can be composed to generate the form output.

The package provides also means to filter and validate the submitted form input values.

The form output can be rendered using bootstrap CSS styles.

Picture of Derek McLean
Name: Derek McLean <contact>
Classes: 1 package by
Country: United Kingdom
Age: ???
All time rank: 4068172 in United Kingdom
Week rank: 694 20 in United Kingdom

Details

form

Latest Stable Version Total Downloads Latest Unstable Version License<br /> Build Status Code Coverage Scrutinizer Code Quality<br /> A super easy Bootstrap ready HTML form generator for PHP

An example generated form

v1.1.0 Now has 'Dynamic Form' functionality. You can add child forms to fields like radio buttons, and have the form appear on selecting the trigger value. See the Dynamic Form section of this readme.

Installation

Install via composer

 composer require delboy1978uk/form

Usage

Firstly, "use" all the classes you'll need for your form. Then create your form and fields.

<?php

use Del\Form\Form;
use Del\Form\Field\Text;
use Del\Form\Field\CheckBox;
use Del\Form\Field\Submit;

// Create a form
$form = new Form('registration');

// Create a username, email, spamlist checkbox, and submit button.
$userName = new Text('username');
$email = new Text('email');
$spamMe = new CheckBox('spam');
$submit = new Submit('submit');

// Set labels
$userName->setLabel('User Name');
$email->setLabel('Email Address');
$spamMe->setLabel('Join our (and 3rd parties) email list(s)');

// Add the fields to the form
$form->addField($userName)
      ->addField($email)
      ->addField($spamMe)
      ->addField($submit);

// Render the form
echo $form->render();

Creating Custom Forms

Of course, it's nicer to create your own form than build one up every time, so just create a class and extend Del\Form\AbstractForm and add your fields in the init() function:

<?php
namespace My\Cool;

use Del\Form\AbstractForm;
use Del\Form\Field\Text\EmailAddress;
use Del\Form\Field\Text\Password;
use Del\Form\Field\Submit;

class LoginForm extends AbstractForm
{
    public function init() 
    {
        $email = new EmailAddress('email');   
        $password = new Password('passord');
        $submit = new Submit('submit');
        $this->addField($email);
        $this->addField($password);
        $this->addField($submit);
    }
}

Then using your form is as simple as:

<?php
use My\Cool\LoginForm;

$form = new LoginForm('login');
$form->render();

Fitering and validating input

For filtering input, add a Del\Form\Filter\Interface to your field object. For validating the filtered input, add a Del\Form\Validator\ValidatorInterface. Currently there is an adapter for Zend\Filter and Zend\Validate, but feel free to write an adapter for you favourite library. Setting a required field adds a Del\Form\Validator\NotEmpty validator.

<?php

// A text field, and an adapter for the filters and the validators
use Del\Form\Field\Text;
use Del\Form\Filter\Adapter\FilterAdapterZf;
use Del\Form\Validator\Adapter\ValidatorAdapterZf;

// Some sensible default string filters for username/email fields 
use Zend\Filter\StripTags;
use Zend\Filter\StringTrim;
use Zend\Filter\StringToLower;

// Validation rules
use Zend\Validator\CreditCard;;

// Create the field
$creditCard = new Text('credit-card');

// Create the filters
$stripTags = new FilterAdapterZf(new StripTags());
$trim = new FilterAdapterZf(new StringTrim());
$lowerCase = new FilterAdapterZf(new StringToLower());

// Create the validators
$emailAddress = new ValidatorAdapterZf(new CreditCard());

// Add them to the field
$creditCard->addFilter($stripTags)
      ->addFilter($trim)
      ->addFilter($lowerCase)
      ->addValidator($emailAddress);

Setting and getting values

Del\Form\FormInterface has a populate method which takes an array (usually the post data, but not necessarily ;-).

<?php
if (isset($_POST['submit'])) { // or ask your request object ;-) 
    $data = $_POST;
    $form->populate($data);
    if ($form->isValid()) {
        $filteredData = $form->getValues();
    }
}

After populate has been called, if you call Form::render(), it will display any validation error messages.

Field Types

Text

Del\Form\Field\Text fields are the most basic field, and come with a built in StripTags and StringTrim filter.

Del\Form\Field\Text\EmailAddress extends Text, and adds an EmailAddress validator for convenience.

Del\Form\Field\Text\Password is a password field which also extends Text.

<?php
use Del\Form\Field\Text;

$text = new Text('text');
$text->setLabel('Needed Details');
$text->setRequired(true);
$text->setPlaceholder('type some text..');
$text->setValue('Blah');

TextArea

Del\Form\Field\TextArea fields are pretty much the same as the Text field

<?php
use Del\Form\Field\TextArea;

$textArea = new TextArea('message');;

Select

Del\Form|Field\Select needs initialised with setOptions():

<?php
use Del\Form\Field\Select;

$select = new Select('choose');
$select->setOptions([
    'BK' => 'Burger King',
    'McD' => 'McDonalds',
    'Q' => 'Quick',
]);

Radio

Del\Form|Field\Radio can be rendered inline (side by side) or not, also needs initialised with setOptions():

<?php
use Del\Form\Field\Radio;

$radio = new Radio('choose');
$radio->setRenderInline(true);
$radio->setOptions([
    'BK' => 'Burger King',
    'McD' => 'McDonalds',
    'Q' => 'Quick',
]);

Checkbox

Del\Form|Field\Checkbox can be rendered inline or not, also needs initialised with setOptions():

<?php
use Del\Form\Field\CheckBox;

$check = new CheckBox('choose');
$check->setOptions([
    'BK' => 'Burger King',
    'McD' => 'McDonalds',
    'Q' => 'Quick',
]);

FileUpload

Del\Form|Field\FileUpload fields come with a nifty looking Bootstrap compatible renderer, but it uses some javascript. If you don't want that, just call setRenderer() and pass it a default TextRender class instance.

<?php
use Del\Form\Field\FileUpload;

$fileUpload = new FileUpload('photo');
$fileUpload->setUploadDirectory('/path/to/destination');

Submit

Del\Form|Field\Submit doesn't really need much:

<?php
use Del\Form\Field\Submit;

$submit = new Submit('submit');
$submit->setValue('Send');

Dynamic Forms

You can have for example a radio button with two choices, and each choice can have a separate form relevant to the checked value. For instance, a radio with a choice of food or drink could then display a dynamic form upon clicking the drink option, and the drinks form will display.

An example generated form

<?php

$radio = new Radio('choice');
$radio->setLabel('Please choose..');
$radio->setRenderInline(true);
$radio->setRequired(true);
$radio->setOptions([
    1 => 'Food',
    2 => 'Drink',
]);

$foodForm = new Form('food');  // This form appears when radio choice 1 is selected
$foodRadio = new Radio('foodchoice');
$foodRadio->setLabel('Choose your food.');
$foodRadio->setRequired(true);
$foodRadio->setOptions([
    1 => 'Cheeseburger',
    2 => 'Pizza',
    3 => 'Steak',
]);
$foodForm->addField($foodRadio);
$radio->addDynamicForm($foodForm, 1);

$drinkForm = new Form('drink');  // This form appears when radio choice 2 is selected
$drinkRadio = new Radio('drinkchoice');
$drinkRadio->setRequired(true);
$drinkRadio->setLabel('Choose your drink.');
$drinkRadio->setOptions([
    1 => 'Beer',
    2 => 'Vodka',
    3 => 'Whisky',
]);
$moreText = new Text('moretext');
$moreText->setLabel('whatever');
$moreText->setPlaceholder('Another text field to fill in');
$drinkForm->addField($drinkRadio);
$drinkForm->addField($moreText);
$radio->addDynamicForm($drinkForm, 2);

  Files  
File Role Description
src (3 files, 6 directories)
tests (4 files, 5 directories)
.scrutinizer.yml Data Auxiliary data
.travis.yml Data Auxiliary data
codeception.yml Data Auxiliary data
composer.json Data Auxiliary data
composer.lock Data Auxiliary data
LICENSE Lic. License text
README.md Doc. Class source

  Files  /  src  
File Role Description
Collection (5 files)
Field (11 files, 1 directory)
Filter (1 file, 1 directory)
Renderer (4 files, 2 directories)
Traits (4 files)
Validator (3 files, 1 directory)
   AbstractForm.php Class Class source
   Form.php Class Class source
   FormInterface.php Class Class source

  Files  /  src  /  Collection  
File Role Description
   AbstractCollection.php Class Class source
   CollectionInterface.php Class Class source
   FieldCollection.php Class Class source
   FilterCollection.php Class Class source
   ValidatorCollection.php Class Class source

  Files  /  src  /  Field  
File Role Description
Text (2 files)
   ArrayValueInterface.php Class Class source
   CheckBox.php Class Class source
   FieldAbstract.php Class Class source
   FieldInterface.php Class Class source
   FileUpload.php Class Class source
   Hidden.php Class Class source
   Radio.php Class Class source
   Select.php Class Class source
   Submit.php Class Class source
   Text.php Class Class source
   TextArea.php Class Class source

  Files  /  src  /  Field  /  Text  
File Role Description
   EmailAddress.php Class Class source
   Password.php Class Class source

  Files  /  src  /  Filter  
File Role Description
Adapter (1 file)
   FilterInterface.php Class Class source

  Files  /  src  /  Filter  /  Adapter  
File Role Description
   FilterAdapterZf.php Class Class source

  Files  /  src  /  Renderer  
File Role Description
Error (4 files)
Field (8 files)
   AbstractFormRenderer.php Class Class source
   FormRenderer.php Class Class source
   FormRendererInterface.php Class Class source
   HorizontalFormRenderer.php Class Class source

  Files  /  src  /  Renderer  /  Error  
File Role Description
   AbstractErrorRender.php Class Class source
   DefaultErrorRender.php Class Class source
   ErrorRendererInterface.php Class Class source
   HorizontalFormErrorRender.php Class Class source

  Files  /  src  /  Renderer  /  Field  
File Role Description
   AbstractFieldRender.php Class Class source
   CheckboxRender.php Class Class source
   FieldRendererInterface.php Class Class source
   FileUploadRender.php Class Class source
   RadioRender.php Class Class source
   SelectRender.php Class Class source
   TextAreaRender.php Class Class source
   TextRender.php Class Class source

  Files  /  src  /  Traits  
File Role Description
   CanRenderInlineTrait.php Class Class source
   HasAttributesTrait.php Class Class source
   HasDomTrait.php Class Class source
   HasOptionsTrait.php Class Class source

  Files  /  src  /  Validator  
File Role Description
Adapter (1 file)
   FloatValidator.php Class Class source
   NotEmpty.php Class Class source
   ValidatorInterface.php Class Class source

  Files  /  src  /  Validator  /  Adapter  
File Role Description
   ValidatorAdapterZf.php Class Class source

  Files  /  tests  
File Role Description
acceptance (2 files)
functional (2 files)
unit (2 files, 1 directory)
_data (4 files)
_support (6 files, 1 directory)
   acceptance.suite.yml Data Auxiliary data
   functional.suite.yml Data Auxiliary data
   unit.suite.yml Data Auxiliary data
   _bootstrap.php Aux. Auxiliary script

  Files  /  tests  /  acceptance  
File Role Description
   AcceptanceTester.php Class Class source
   _bootstrap.php Aux. Auxiliary script

  Files  /  tests  /  functional  
File Role Description
   FunctionalTester.php Class Class source
   _bootstrap.php Aux. Auxiliary script

  Files  /  tests  /  unit  
File Role Description
Del (2 files, 3 directories)
   UnitTester.php Class Class source
   _bootstrap.php Aux. Auxiliary script

  Files  /  tests  /  unit  /  Del  
File Role Description
Field (7 files)
Renderer (1 file)
Validator (1 file)
   DynamicFormTest.php Class Class source
   FormTest.php Class Class source

  Files  /  tests  /  unit  /  Del  /  Field  
File Role Description
   CheckboxTest.php Class Class source
   FileUploadTest.php Class Class source
   HiddenTest.php Class Class source
   RadioTest.php Class Class source
   SelectTest.php Class Class source
   TextAreaTest.php Class Class source
   TextTest.php Class Class source

  Files  /  tests  /  unit  /  Del  /  Renderer  
File Role Description
   HorizontalFormRendererTest.php Class Class source

  Files  /  tests  /  unit  /  Del  /  Validator  
File Role Description
   FloatValidatorTest.php Class Class source

  Files  /  tests  /  _data  
File Role Description
   dump.sql Data Auxiliary data
   dynamic-form.PNG Data Auxiliary data
   fol.gif Icon Icon image
   form.png Data Auxiliary data

  Files  /  tests  /  _support  
File Role Description
_generated (3 files)
   AcceptanceHelper.php Class Class source
   AcceptanceTester.php Class Class source
   FunctionalHelper.php Class Class source
   FunctionalTester.php Class Class source
   UnitHelper.php Class Class source
   UnitTester.php Class Class source

  Files  /  tests  /  _support  /  _generated  
File Role Description
   AcceptanceTesterActions.php Class Class source
   FunctionalTesterActions.php Class Class source
   UnitTesterActions.php Class Class source

 Version Control Unique User Downloads Download Rankings  
 100%
Total:188
This week:0
All time:8,419
This week:268

For more information send a message to info at phpclasses dot org.