The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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 3 2006-11-02 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