Thorsten Drobnik
and 1 contributors


HTML::TurboForm - fast and compact HTML Form Class


to start with, two simple examples of how to use turboform. I am still working on both the classes and the docs so please be patient.

Usage variant 1 : via objects and methods

 my $options;
    $options->{ 'label1' }='1';
    $options->{ 'label2' }='2';
    $options->{ 'label3' }='3';
    $form->add_element({ type => 'Html', text =>'<center>'  });
    $form->add_element({ type => 'Text',     name => 'texttest',     label => 'element1' } );
    $form->add_element({ type => 'Text',     name => 'texttest2',     label => 'vergleichselement' } );
    $form->add_element({ type => 'Textarea', name => 'textareatest', label => 'Areahalt:' } );
    $form->add_element({ type => 'Submit',   name => 'freeze',       label => ' ',            value=>'einfrieren' } );
    $form->add_element({ type => 'Submit',   name => 'unfreeze',     label => ' ',            value=>'normal' } );
    $form->add_element({ type => 'Checkbox', name => 'boxtest',      label => 'auswählen',   options =>  $options, params =>{ 'listmode'=>'' } } );
    $form->add_element({ type => 'Html', text =>'<hr>'  });
    $form->add_element({ type => 'Select',   name => 'selecttest',   label => 'selectieren', options =>  $options } );
    $form->add_element({ type => 'Select',   name => 'selecttest2',  label => 'selectieren', options => $options,  attributes => { 'multiple'=>'' , 'size'=>'3' } } );
    $form->add_element({ type => 'Text',     name => 'mailtest',    label => 'E-Mail' } );
    $form->add_element({ type => 'Radio',    name => 'tadiotest',    label => 'radioteile', options => $options, params =>{ 'listmode', 'norow'} } );
    $form->add_element({ type => 'Date',     name => 'datetest',    label => 'Datum', params=>{ startyear=> '2000' , endyear => '2020' } } );
    $form->add_element({ type => 'Image',     name => 'imagetest',    label => 'Bild', width=>'400', height=>'300',
                       thumbnail => { width => '60', height=>'80' },
                       loadurl=>'/static/images/temp' } );
    $form->add_constraint({ type=> 'Equation', name=> 'texttest', text=> 'kein Vergleich', params=>{ operator => 'eq', comp=>$form->get_value('texttest2') } });
    $form->add_constraint({ type=> 'Required', name=> 'boxtest', text=> 'du musst schon was auswählen' });
    $form->add_constraint({ type=> 'Date',     name=> 'datetest', text=> 'das ist doch kein datum' });
    $form->add_constraint({ type=> 'Email',    name=> 'mailtest', text=> 'ungültige Mailadresse' });
    $form->add_element({ type => 'Html', text =>'</center>'  });
    $form->freeze_all() if ($form->submitted() eq 'freeze');
    $c->stash->{form} = $form->render();
    if ($form->submitted() eq 'freeze') {
       my @cols= ('txt1','date','txt2','checkboxtest');
       my $data=$form->map_value(@cols);

Usage Variant 2 : via yml file:

 my $form= new HTML::TurboForm($c->req->params);
 my $text=$form->render();

 if ($form->submitted eq 'freeze') {}

 Sample yml-file:

--- languages: - de elements: - type: Html text: <center>

  - type: Text
    name: messageausyml
    label: ausyml

  - type: Text
    name: txt1
    label: sampleinput

  - type: Text
    name: txt2
    label: whatever to compare

  - type: Checkbox
    label: chooser
    name: checkboxtest
        label1: 1
        label2: 2

  - type: Html
    text: <div class="form_row"><hr></div>

  - type: Radio
    label: radiochooser
        radio1: 1
        radio2: 2

  - type: Submit
    name: freeze
    value: einfrieren

  - type: Submit
    name: defreeze
    value: normal

  - type: Date
    label: Datum
    name: date
      startyear: 2000
      endyear: 2010

  - type: Html
    text: </center>


  - type: Required
    name: messageausyml
    text: <font size=2><b>mandatory field</b></font>

  - type: Date
    name: date
    text: <font size=2><b>must be a correct date</b></font>

  - type: Equation
    name: txt1
    text: <font size=2><b>must be higher</b></font>
      operator: <
      compvalue: txt2


HTML::TurboForm was designed as a small, fast and compact Form Class to use with catalyst in order to easily create any needed Form. I know there a quite a lot of classes out there which do the same but i wasn't quite content with what i found. They were either too slow or complicated or both.



Arguments: $request

Creates new Form Object, needs Request Arguments to fill out Form Elements. To do so it's very important that the form elements have the same names as the request parameters.


Arguments: $params

Adds a new Contraint to the Form. Constraints can be date, required or any other constraint class object. Only if they successfully match the given constraint rule the form will return valid.


Arguments: $fn

Loads a form from a given YML File.


Arguments: $name

will unIgnore an element so it will be rendered normally


Arguments: $name

will Ignore an element so it won't be rendered and in effect invisible, it's value will be given to the form as hidden value


Arguments: $params

Will add a new Form Element, for example a new text element or select box or whatever.


Arguments: none

Renders the form. Will retrun the HTML Code for the form including error messages.


Arguments: none

Will be true if the form is correctly filled out by user, otherwise it returns false and shows the corresponding error message(s).


Arguments: $name, $option

Adds option to HTML elements that needs them, for example select boxes.


Arguments: $name

Will disable the HTML Element identified by name for viewing purposes only.


Arguments: none

Freezes the whole form.


Arguments: $name

Unfreezes certain Element.


Arguments: $name

Returns Value of Eelement by name


Arguments: $data

fills form with values form hash.


Arguments: @columns

Expects an array with column names. This method is used to map the request and form elements to the columns of a database table.


Thorsten Drobnik,


This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.

1 POD Error

The following errors were encountered while parsing the POD:

Around line 622:

Non-ASCII character seen before =encoding in ''auswählen','. Assuming UTF-8