ha... it works. i renamed relation from 'profile' to 'Profile'...
i don`t know why i got error with first name.
On Oct 8, 7:55 pm, Alex <[EMAIL PROTECTED]> wrote:
> i called it 'Profile', but not 'profile', because i`m getting error
> "Fatal error: Call to a member function fromArray() on a non-object
> in..."
>
> $this->getObject()->profile->sfGuardUser = $this->getObject();
>
> with this string i`m getting records in both tables, but in "slave"
> table i have no data except `user_id`. i`m trying to figure out
> why...
>
> On Oct 8, 6:11 pm, "Thomas Rabaix" <[EMAIL PROTECTED]> wrote:
>
> > It's the name of the relation as defined in your schema. The name
> > 'Parent' or 'ChildObject' it just example of named relation. You have
> > to adapt to your code
>
> > I guess it will be : $this->getObject()->profile->sfGuardUser =
> > $this->getObject();
>
> > and you have to name the embed form 'profile'.
>
> > On Wed, Oct 8, 2008 at 3:37 PM, Alex <[EMAIL PROTECTED]> wrote:
>
> > > Hello, Thomas!
>
> > > Look... i did not understand what does this string mean $this-
> > >>getObject()->ChildObject->Parent = $this->getObject();
>
> > > i have not parent property.
>
> > > this is my function, it works fine, but maybe i can do it in one
> > > string...
>
> > > public function updateObject()
> > > {
> > > $object = parent::updateObject();
> > > $values = $this->getValues();
>
> > > $this->getObject()->profile->setFirstName($values['Profile']
> > > ['first_name']);
> > > $this->getObject()->profile->setLastName($values['Profile']
> > > ['last_name']);
> > > $this->getObject()->profile->setMidName($values['Profile']
> > > ['mid_name']);
>
> > > $this->getObject()->profile->setDisplayName($values['Profile']
> > > ['first_name']);
>
> > > $this->getObject()->profile->setPostalCode($values['Profile']
> > > ['postal_code']);
> > > $this->getObject()->profile->setDateOfBirth($values['Profile']
> > > ['date_of_birth']);
> > > $this->getObject()->profile->setGender($values['Profile']
> > > ['gender']);
>
> > > return $object;
> > > }
>
> > > Thank you again!
>
> > > On Oct 8, 12:59 pm, "Thomas Rabaix" <[EMAIL PROTECTED]> wrote:
> > >> Hello,
>
> > >> This is a quick example. Please note the updateObject method is to fix
> > >> an issue with doctrine.
>
> > >> class ParentForm extends BaseParentForm
> > >> {
>
> > >> public function setup()
> > >> {
> > >> parent::setup();
>
> > >> $this->embedForm('ChildObject', new
> > >> ChildObjectForm($this->getObject()->getChildObject()));
> > >> }
>
> > >> public function configure()
> > >> {
> > >> $this->widgetSchema['category_id']->setOption('add_empty', false);
> > >> }
>
> > >> public function updateObject()
> > >> {
> > >> $object = parent::updateObject();
>
> > >> $this->getObject()->ChildObject->Parent = $this->getObject();
>
> > >> return $object;
> > >> }
>
> > >> }
> > >> On Wed, Oct 8, 2008 at 10:31 AM, Alex <[EMAIL PROTECTED]> wrote:
>
> > >> > Thanks for fast reply, Thomas! This is very helpful.
>
> > >> > I use Doctrine. Do you have any example of form?
>
> > >> > On Oct 8, 11:52 am, "Thomas Rabaix" <[EMAIL PROTECTED]> wrote:
> > >> >> Hello,
>
> > >> >> 1. Clean form :
> > >> >> You should create a new class which extends the default signup form.
> > >> >> In this class you create the embed form (the setup method) and
> > >> >> overwrite the save method. So mainly you move your logic from the
> > >> >> action to the new form.
>
> > >> >> 2. Propel vs Doctrine :
> > >> >> Now doctrine implements an array interface, that's means when you bind
> > >> >> values from the request, the value are cascadly (?) defined to related
> > >> >> object. Propel does not have this feature, so I suppose you have to do
> > >> >> that by hand in the save method. You can use the model::fromArray
> > >> >> method or recreate a form (which isnot great IMHO)
>
> > >> >> Thomas
>
> > >> >> On Tue, Oct 7, 2008 at 9:50 PM, Alex <[EMAIL PROTECTED]> wrote:
>
> > >> >> > Hi, all. I think i did not understand this embed form system, so i
> > >> >> > need some help...
>
> > >> >> > Pretty usual example is registration form.
> > >> >> > I have two tables sf_guard_user and sf_guard_user_profile and two
> > >> >> > forms.
>
> > >> >> > This is usual forms with all necessary widgets and validators.
>
> > >> >> > This is my sing up action:
>
> > >> >> > public function executeIndex($request)
> > >> >> > {
>
> > >> >> > $singupForm = new SingupUserForm();
> > >> >> > $userProfileForm = new SingupUserProfileForm();
>
> > >> >> > $singupForm->embedForm('Profile', $userProfileForm);
>
> > >> >> > $this->singupForm = $singupForm;
>
> > >> >> > if ($request->isMethod('post'))
> > >> >> > {
> > >> >> > $singupData = $request->getParameter('singup');
>
> > >> >> > $singupData['username'] = $singupData['email']; // don`t think
> > >> >> > about it
> > >> >> > $singupData['algorithm'] = 'sha1'; // and about it too ;)
>
> > >> >> > $this->singupForm->bind($singupData);
>
> > >> >> > if($this->singupForm->isValid()){
> > >> >> > $newUserId = $this->singupForm->save();
>
> > >> >> > $newUserProfileFrom = new SingupUserProfileForm();
>
> > >> >> > $newUserProfileData = $singupData['Profile'];
> > >> >> > $newUserProfileData['user_id'] = $newUserId->id;
> > >> >> > $newUserProfileFrom->bind($newUserProfileData);
> > >> >> > $newUserProfileFrom->save();
> > >> >> > //$this->redirect('singup/thankyou');
> > >> >> > }
> > >> >> > }
>
> > >> >> > this works fine and i got records in both tables, BUT if a cant
> > >> >> > just
> > >> >> > do $this->singupForm->save(); and get all things done... i think i
> > >> >> > do
> > >> >> > something wrong...
> > >> >> > and this piece of code makes 4 queries to database!!! i don`t need
> > >> >> > this at all;)
>
> > >> >> > i can still use something like that (it works great):
>
> > >> >> > $newUser = new sfGuardUser();
> > >> >> > $newUser->email = '[EMAIL PROTECTED]';
>
> > >> >> > $newUserProfile = new sfGuardUserProfile();
> > >> >> > $newUserProfile->first_name = 'alex';
> > >> >> > $newUser->setProfile($newUserProfile);
> > >> >> > $newUser->save();
>
> > >> >> > but i believe there is a better way for forms.
>
> > >> >> --
> > >> >> Thomas Rabaix
> > >> >> Internet Consultant
>
> > >> --
> > >> Thomas Rabaix
> > >> Internet Consultant
>
> > --
> > Thomas Rabaix
> > Internet Consultant
>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"symfony users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---