Re: [Maypole] A few post-2.05 change questions

From: Jesse Sheidlower (jester at panix.com)
Date: Sun Jan 23 2005 - 18:19:10 GMT


On Sun, Jan 23, 2005 at 02:40:57PM +0000, Dave Howorth wrote:
>
> and I'm too lazy to compare the source, so if someone
> >could point it out to me, I'd be grateful. In most of my
> >other apps I override do_edit to use Data::FormValidator
> >instead, but I was trying to keep this simple, because I don't
> >actually have any validation needs.
>
> I'm interested to try Data::FormValidator with Maypole as well. Yours is
> the first posting I've seen from somebody who's tried it. Would you mind
> posting some code (your do_edit?) and/or sharing your experience?

It's incredibly simple, and pretty much drops right in place in
Maypole, with the DFV profile and the needed changes in do_edit.

In my driver class, I have something like:

---
SlangDB->config->{slangbiblio}{dfv_profile} =
  {
   optional =>  [qw /author title pub_date pub_location format pages publisher bib_author bib_source bib_date dib_info holding_lib shelfmark type category status brief_description description last_modified_by/],
   required => [qw /title/],
   constraints => {
                   format => qr/^\d+$/,
                   type => qr/^\d+$/,
                   category => qr/^\d+$/,
                   status => qr/^\d+$/,
                  },
   filters => 'trim',
   missing_optional_valid => 1,
  };
---

(Here the constraints are all to foreign keys for other tables; I don't have any real constraints, but you get the idea.)

Then, I change bits of do_edit like so (I can't quickly show you the whole thing, because I've mucked with parts of it for other reasons, but it should be obvious):

--- my $results = Data::FormValidator->check($r->{params}, $r->{config}{$r->{table}}{dfv_profile});

if ($results->has_invalid or $results->has_missing) { my $errors = $results->msgs; # Set it up as it was: $r->{template_args}{cgi_params} = $r->{params}; $r->{template_args}{errors} = $errors; $r->{template} = "edit";

} else {

my %valid_params = %{$results->valid};

if ($obj) { # We have something to edit $obj->set(%valid_params); $obj->update; } else { # new record $obj = $self->create(\%valid_params); $creating++; } $r->{template} = "view"; } ---

And that's pretty much it. Works like a charm.

HTH.

Best,

Jesse

_______________________________________________ maypole mailing list maypole at lists.netthink.co.uk http://lists.netthink.co.uk/listinfo/maypole



This archive was generated by hypermail 2.1.3 : Thu Feb 24 2005 - 22:25:57 GMT