NAME

CGI::FormBuilder::Source::YAML - Initialize FormBuilder from YAML file

SYNOPSIS

use CGI::FormBuilder;

my $form = CGI::FormBuilder->new(
   source  => {
       source  => 'form.fb',
       type    => 'YAML',
   },
);

my $lname = $form->field('lname');  # like normal

DESCRIPTION

This reads a YAML (YAML::Syck) file that contains FormBuilder config options and returns a hash to be fed to CGI::FormBuilder->new().

Instead of the syntax read by CGI::FormBuilder::Source::File, it uses pure YAML syntax as read by YAML::Syck. That means you fully specify the entire data structure -- the module doesn't do any fancy processing.

LoadCode is enabled, so you can use YAML syntax for defining subroutines. This is convenient if you have a function that generates validation subrefs, for example, I have one that can check profanity using Regexp::Common.

validate:
   myfield:    
       javascript: /^[\s\S]{2,50}$/
       perl: !!perl/code: >-
           {   My::Funk::fb_perl_validate({ 
                   min         => 2, 
                   max         => 50, 
                   profanity   => 'check' 
               })->(shift);
           }

Well there is one exception to the "pure YAML syntax", you can specify references as string values that start with \&, \$, \@, or \% in the same way you can with CGI::FormBuilder::Source::File. If you have a full direct package reference, it will look there, otherwise it will traverse up the caller stack and take the first it finds.

EXAMPLE

method:     GET
header:     0
title:      test
name:       test
action:     /test
submit:     test it
linebreaks: 1

required:   
   - test1
   - test2

fields:
   - test1
   - test2
   - test3
   - test4

fieldopts:
   test1:
       type:       text
       size:       10
       maxlength:  32

   test2:
       type:       text
       size:       10
       maxlength:  32

   test3:
       type:       radio
       options:
           -
               - 1
               - Yes
           -
               - 0
               - No

   test4:
       options:    \&test4opts
       sort:       \&Someother::Package::sortopts

validate:
   test1:      /^\w{3,10}$/
   test2:
       javascript: EMAIL
       perl:       eq 'test@test.foo'
   test3:
       - 0
       - 1
   test4:  \&test4opts

You get the idea. A bit more whitespace, but it works in a standardized way.

METHODS

new()

Normally not used directly; it is called from CGI::FormBuilder. Creates the CGI::FormBuilder::Source::YAML object. Arguments from the 'source' hash passed to CGI::FormBuilder->new() will become defaults, unless specified in the file.

parse($source)

Normally not used directly; it is called from CGI::FormBuilder. Parses the specified source file. No fancy params -- just a single filename is accepted. If the file isn't acceptable to YAML::Syck, I suppose it will die.

SEE ALSO

CGI::FormBuilder, CGI::FormBuilder::Source

REVISION

$Id: YAML.pm 4 2006-11-07 17:00:00Z markle $

AUTHOR

Copyright (c) 2006 Mark Hedges <hedges@ucsd.edu>. All rights reserved.

LICENSE

This module is free software; you may copy it under terms of the Perl license (GNU General Public License or Artistic License.) http://www.opensource.org/licenses/index.html