On Mon, Mar 7, 2011 at 1:03 AM, Eric Berg <[email protected]> wrote: > On 3/4/11 11:03 AM, Gerda Shank wrote: >> >> On 3/4/11 8:23 AM, Eric Berg wrote: >>> >>> I'm trying to do some progressive engagement by allowing one of my forms >>> to be filled out before a user is required to log in, but once the form is >>> filled, I need them to log in so that I can get the user ID, which is part >>> of the record for that form's row in my db. >> >> So after the form is submitted, you want to save the form contents >> somehow, then present a login form, then after the user logs in, save it to >> the database? > > Yes. What I did previously was just to save a hash of the values, but I'm > not sure how to pass that to formhandler given that my db constraints > currently require the values for this form to have a creator_id, which is > just what I need from the login. So, I'm thinking at this point that I need > to find a way to pass a hash of form values back to formhandler..that's got > to be possible, and must be done after I get the form submission or I'll > have to loosen up the constraints on my db to allow me to insert rows > without a creator ID. I'm looking into that now. >> >> Is the part you're not sure of how/where to save the form contents? There >> are the usual options for preserving data across several requests, i.e. >> stash, database, etc. > > I've been stashing a hash of form params. I have to test this out, but I > have to figure out if I can validate the form without the creator_id's being > present. I added it to the form, because formhandler was barfing when I > used the simple form of stashing the new_result({}), then returning > $self->form($c) in my add(). I have to figure out how to validate the form > wtihout having it submitted to teh db, because that causes an error when the > creator_id is missing, or add the creator_id (hidden and empty) to the form > and only validate after login. I guess I just have to try a few things. If > any of you good folks have banged your head against this and have ideas, > they'd certainly be welcome. >> >> Then you'd have to decide how you want to save the data. You *could* use >> FormHandler to do that, but if you have an already validated set of data, it >> might be simpler to just save it to the database yourself. > > May be. Probably, since I'm trying to wrest control from formhandler so I > can validate a form without the creator_id, then redirect to login, then > take the values of the form and the logged-in user's id and commit that to > the db. One change that is causing me problems is that I moved from the > approach of having the form be a simple attribute (has 'form') where I was > doing all the processing in the show and add methods to the approach where I > implemented $self->form() per the sample referenced in > HTML::FormHandler::Manual::Catalyst. > > Thinking through this in writing this, I believe that what I have to do is > reimplement the form as a simple attribute and then handle the process() as > needed in the add() method. I think that's where I shot myself in the foot. > > Thank you muchly. I'll post my successful results for the benefit of those > who follow. > > Eric >> >> I'm not quite sure if I addressed the particular issues you were having; >> if not, please clarify :) >> >> Gerda >> >> >> _______________________________________________ >> List: [email protected] >> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst >> Searchable archive: >> http://www.mail-archive.com/[email protected]/ >> Dev site: http://dev.catalyst.perl.org/ > > > _______________________________________________ > List: [email protected] > Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst > Searchable archive: http://www.mail-archive.com/[email protected]/ > Dev site: http://dev.catalyst.perl.org/ >
I think I got 2 solutions for your problem. 1) I split the form into MyFormBase.pm and MyForm MyFormBase is a plain FormHandler class MyForm on the other hand extends from MyFormBase and HTML::FormHandler::Model::DBIC I send a MyFormBase form to the user, validate it, store the values $form->values (or something like that) in the session/flash and later on use these values to fill an MyForm form. https://github.com/davewood/Nolabel/tree/master/lib/Nolabel/Form 2) get the values from the form, store them in the session/flash, make the database insert manually. _______________________________________________ List: [email protected] Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/[email protected]/ Dev site: http://dev.catalyst.perl.org/
