Here I had a form that tested valid yet would not save to the database. Doesn't that seem broken?
I was hand coding a form, so that the HTML/PHP in the template looked (in part) like this: <div class="fieldgrp"> <label for="sf_guard_user_profile_school"> School </label> <div class="field"> <?php echo $form['school']->renderError() ?> <select id="UVA-status-registration" class="longfield-select" name="sf_guard_user_profile[school]"> <option><?php echo $form["school"]->getValue() ?></option> <option>Architecture</option> <option>Arts Sciences</option> <option>Business (Darden MBA)</option> <option>Engineering</option> <option>Law</option> <option>Medicine</option> <option>Nursing (Curry)</option> </select> </div> </div> <div class="fieldgrp"> <label for="sf_guard_user_profile_program"> Major/Concentration </label> <div class="field"> <?php echo $form['program']->renderError() ?> <?php echo $form['program'] ?> </div> </div> Finally, I tried to save the form, and I found that it would not save. I got no errors. I switched over to the dev front controller in the hopes that I would get an error, but no, I got no error. My action looked like this: public function executeUpdateUser($request) { if ($this->getUser()->getGuardUser()) { $this->form = new sfGuardUserProfileForm (sfGuardUserProfilePeer::retrieveByPk($this->getUser()->getGuardUser()- >getProfile()->getId())); $submittedValuesArray = $request->getParameter ('sf_guard_user_profile'); if (is_array($submittedValuesArray)) { $submittedValuesArray["user_id"] = $this->getUser()- >getGuardUser()->getId(); $this->form->bind($submittedValuesArray, $request->getFiles ('sf_guard_user_profile')); if ($this->form->isValid()) { $userProfile = $this->form->save(); } } $this->getUser()->setFlash('profile_saved', 'Your info is updated'); } } After the form->save() line, I tried to echo out data from the saved userProfile object: echo $userProfile->getProgram(); die(); Sure enough, this showed the correct information on the screen. Whatever I had just typed in as my program, that is what was now stored in $userProfile. After awhile of testing, I realized that I'd stupidly left out the id of the profile. So, finally, I added this line: $submittedValuesArray["id"] = $this->getUser()->getGuardUser()- >getProfile()->getId(); And now the form saved! My action now looked like this: public function executeUpdateUser($request) { if ($this->getUser()->getGuardUser()) { $this->form = new sfGuardUserProfileForm (sfGuardUserProfilePeer::retrieveByPk($this->getUser()->getGuardUser()- >getProfile()->getId())); $submittedValuesArray = $request->getParameter ('sf_guard_user_profile'); if (is_array($submittedValuesArray)) { $submittedValuesArray["id"] = $this->getUser()->getGuardUser()- >getProfile()->getId(); $submittedValuesArray["user_id"] = $this->getUser()- >getGuardUser()->getId(); $this->form->bind($submittedValuesArray, $request->getFiles ('sf_guard_user_profile')); if ($this->form->isValid()) { $userProfile = $this->form->save(); } } $this->getUser()->setFlash('profile_saved', 'Your info is updated'); } } Then I thought, "I guess all the times I tried to save before, without an id, I was creating a new record in the database." But I looked in the database, and there were no new records. So now I'm thinking that id needs to be there in the array of submitted values, even if it has no value, it needs to be there before the form will save it to the database. But if this is so, shouldn't there be some kind of error, for those situations where there is no id? Here I had a form that tested valid yet would not save to the database. Doesn't that seem broken? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to symfony-users@googlegroups.com To unsubscribe from this group, send email to symfony-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-users?hl=en -~----------~----~----~----~------~----~------~--~---