Re: Can you serialize a Formbuilder object?

From: Date: Mon, 27 Jun 2005 21:56:57 +0000
Subject: Re: Can you serialize a Formbuilder object?
References: 1 2  Groups: php.pear.general 
Request: Send a blank email to pear-general+get-19790@lists.php.net to get a copy of this message
On 6/27/05, Andrew Wooldridge <andrew.r.wooldridge@vanderbilt.edu> wrote: > On 6/27/05 4:13 PM, "Andrew Wooldridge" <andrew.r.wooldridge@vanderbilt.edu> > wrote: > > On 6/27/05 4:06 PM, "Justin Patrin" <papercrane@gmail.com> wrote: > >> On 6/27/05, Andrew Wooldridge <andrew.r.wooldridge@vanderbilt.edu> wrote: > >>> (I'll mirror this exchange on the mailing list afterward) > >>> > >>> I already had those require_once includes you suggested, but without the > >>> 'serialize' line, I continue to get that __PHP_Incomplete_Class rather > >>> than > >>> FormBuilder type. > >> > >> Well when I've seen the incomplete class stuff it was because the > >> class wasn't required. Are you absolutely sure that the files are > >> required before you're using the objects? > >> > > I am 99.5% sure, of course I'm testing this right now, as this was your only > > prior experience with this problem. > > Result of my test: I had included the line already > >>>> require_once('DB/DataObject/FormBuilder.php'); > > But I did not call 'require_once' with the others, including all possible > quickform elements are still __PHP_Incomplete_Class typed inside the > formbuilder object : > > DB/DataObject/FormBuilder/QuickForm.php > HTML/QuickForm/header.php > HTML/QuickForm/hidden.php > HTML/QuickForm/text.php > Etc.... > > I require_once'd the /FormBuilder/QuickForm.php and that fixed Incomplete > type error. Might there be a way to avoid requiring every single class used > by quickform? > > To illustrate, here's a piece of HTML source generated when I call > echo print_r($fb). If I require_once HTML/QuickForm/header.php this becomes > typed correctly. > > Please advise, Justin. Thanks, > As I expected... :-( No, I don't know of any easy way to fix this except possibly to use __autoload() in PHP5. Other than that you'll either have to include all of the QF elements you may be using or rebuild the form. You *could* also store the element types in some kind of global array..... or you could loop through FormBuilder's elementTypeMap option and include all of those. Plus header, hidden, and possibly static. > > > > >>> > > > > > >>> Can you tell me more about what you meant by 're-generate the > >>> FormBuilder'? > >> > >> I actually meant regenerate the form. The normal way to use > >> FormBuilder is to regenerate the form on every request, even when a > >> form is submitted. > >> > > > > Would you please tell me how to repopulate the form values previously > > obtained after the new form is regenerated? > > > >>> > >>> > >>> On 6/27/05 3:43 PM, "Justin Patrin" <papercrane@gmail.com> wrote: > >>> > >>>> On 6/27/05, Andrew Wooldridge <andrew.r.wooldridge@vanderbilt.edu> > >>>> wrote: > >>>>> I am working on a multi-page wizard-like form using quickform controller, > >>>>> with forms build by formbuilder. The benefits to this are easy to see, > >>>>> but > >>>>> implementation is tricky. Currently stuck when it comes to processing the > >>>>> forms with the line: > >>>>> > >>>>> $page->process(array(&$fb, 'processForm'), false); > >>>>> > >>>>> I am currently using serialize() on the formbuilder objects I create, then > >>>>> adding them to an array of these serialized objects inside the $_SESSION > >>>>> array. I do this because each page of the controller calls the php script > >>>>> again and no formbuilder object can be stored in memory. Without the > >>>>> serialize array, even if passed by reference, they therefore came back > >>>>> from > >>>>> $_SESSION as __PHP_Incomplete_Class object type. > >>>>> > >>>>> When they are unserialized, some of the objects inside this big > >>>>> formbuilder > >>>>> object are __PHP_Incomplete_Class Object type, although the $fb itself is > >>>>> now the appropriate DB_DataObject_FormBuilder type. > >>>>> > >>>>> Please advise. Has this been tried before with success? Is it > >>>>> theoretically possible to completely store and faithfully retrieve a > >>>>> formbuilder object? -A > >>>>> > >>>> > >>>> You shouldn't need to serialize the formbuilder object. The > >>>> __PHP_Incomplete_Class type happens because the correct PHP files have > >>>> not yet been required. Just store the object in your session as normal > >>>> (no serialize) and make sure to > >>>> require_once('DB/DataObject/FormBuilder.php'); as well as > >>>> HTML_QuickForm and any elements that are in the form. Yes I know this > >>>> is somewhat of a pain. This is why it's just easier to re-generate the > >>>> FormBuilder. > >>> > >>> > >> > > -- Justin Patrin

« previous php.pear.general (#19790) next »