This does not fail validation, and it saves both objects; but it
doesn't save them related to each other.  The Email['user_id'] is left
null after this form submittal.

I have submitted a ticket for this: http://trac.symfony-project.org/ticket/4906

-- Stephen Ostrow <[EMAIL PROTECTED]>

On Nov 11, 12:15 pm, "Jonathan Wage" <[EMAIL PROTECTED]> wrote:
> This works:http://pastebin.com/m1db73fde
>
> I think though that this should work:
>
> class UserForm extends BaseUserForm
> {
>   public function configure()
>   {
>     foreach ($this->getObject()->getEmails() as $email)
>     {
>       $this->embedForm('Emails[' . $email['id'] . ']', new
> EmailForm($email));
>     }
>   }
>
> }
>
> We will have to ask Fabien if this is supposed to work or not, can you
> create a ticket asking about this?
>
> Thanks, Jon
>
> On Tue, Nov 11, 2008 at 9:29 AM, isleshocky77 <[EMAIL PROTECTED]>wrote:
>
>
>
>
>
> > Jon,
> >  Thanks for the quick reply.
> >  With my knowledge of Doctrine, that's what I assumed the first error
> > which is why I had tried Email[] and I had tried Email[0] before that
> > as well.  When I tried your code I get the same problem as with just
> > Email[]
> > {{{
> > Unexpected extra form field named "Email".
> > }}}
>
> > This is what lead me to believe that it might be a problem I'm having
> > with symfony and not just Doctrine in symfony.
>
> > If it helps here is the outputted form:
> > {{{
> > #!html
> >  <label for="user_first_name">First name</label>
> >  <input type="text" name="user[first_name]" id="user_first_name" />
> > </li>
> > <li>
> >  <label for="user_last_name">Last name</label>
> >  <input type="text" name="user[last_name]" id="user_last_name" />
> > </li>
> > <li>
> >  Email[0]
> >  <table>
>
> >  <tr>
> >  <th><label for="user_Email_0_user_id">User id</label></th>
> >  <td><select name="user[Email][0][user_id]"
> > id="user_Email_0_user_id">
> > <option value="" selected="selected"></option>
> > <option value="1">1</option>
> > <option value="2">2</option>
> > </select></td>
> > </tr>
> > <tr>
> >  <th><label for="user_Email_0_address">Address</label></th>
>
> >  <td><input type="text" name="user[Email][0][address]"
> > id="user_Email_0_address" /><input type="hidden" name="user[Email][0]
> > [id]" id="user_Email_0_id" /></td>
> > </tr>
> > </table>
> > </li>
> > <li>
> >  Email[1]
> >  <table>
> >  <tr>
> >  <th><label for="user_Email_1_user_id">User id</label></th>
> >  <td><select name="user[Email][1][user_id]"
> > id="user_Email_1_user_id">
> > <option value="" selected="selected"></option>
>
> > <option value="1">1</option>
> > <option value="2">2</option>
> > </select></td>
> > </tr>
> > <tr>
> >  <th><label for="user_Email_1_address">Address</label></th>
> >  <td><input type="text" name="user[Email][1][address]"
> > id="user_Email_1_address" /><input type="hidden" name="user[Email][1]
> > [id]" id="user_Email_1_id" /></td>
> > </tr>
> > </table>
> > <input type="hidden" name="user[id]" id="user_id" /></li>
> > }}}
>
> > -- Stephen Ostrow <[EMAIL PROTECTED]>
>
> > On Nov 11, 9:55 am, "Jonathan Wage" <[EMAIL PROTECTED]> wrote:
> > > Well, you get that error because when you embed it with a name of Email,
> > it
> > > tries to set something to a Doctrine record which is a collection, and
> > you
> > > are passing it a single piece of data.
>
> > > Try:
>
> > > for ($i = 0; $i < 5; $i++)
> > > {
> > >    $form->embedForm('Email[' . $i . ']', new EmailForm());
>
> > > }
>
> > > On Tue, Nov 11, 2008 at 2:09 AM, isleshocky77 <[EMAIL PROTECTED]
> > >wrote:
>
> > > > Ok, I've been trying to get this to work properly for a few days now
> > > > and have made a little progress but cannot get this to fully work.
>
> > > > So My model looks something like this:
> > > > {{{
> > > > #!yaml
> > > > User:
> > > >  columns:
> > > >    first_name: string(255)
> > > >    last_name: string(255)
>
> > > > Email:
> > > >  columns:
> > > >    user_id:  integer
> > > >    address: string(255)
> > > >  relations:
> > > >    User:
> > > > }}}
>
> > > > I'm embedding the form in the action just for ease of testing this
> > > > before I put it in the form class.
>
> > > > My Action:
> > > > {{{
> > > > #!php
> > > >  public function executeIndex(sfWebRequest $request)
> > > >  {
> > > >    $this->form = new UserForm();
> > > >    $email_form = new EmailForm();
>
> > > >    $this->form->embedForm('Email', $email_form);
>
> > > >    if ($request->isMethod('post'))
> > > >    {
>
> > > >      $this->form->bind($request->getParameter('user'));
> > > >      if ($this->form->isValid())
> > > >      {
> > > >        $this->form->save();
> > > >      }
> > > >    }
> > > >  }
> > > > }}}
>
> > > > When I try to submit the form I get an error:
> > > > {{{
> > > > Catchable fatal error: Argument 1 passed to
> > > > Doctrine_Record::fromArray() must be an array, string given, called
> > > > in /srv/symfony/branches/1.2/lib/plugins/sfDoctrinePlugin/lib/doctrine/
> > > > Doctrine/Collection.php on line 702 and defined in /srv/symfony/
> > > > branches/1.2/lib/plugins/sfDoctrinePlugin/lib/doctrine/Doctrine/
> > > > Record.php on line 1506
> > > > }}}
>
> > > > When I change the embedForm('Email', $email_form) to
> > > > embedForm('email', $email_form) then the form submits without error,
> > > > but doesn't save the email address.
>
> > > > I would preferably like it like this:
> > > > embedForm('Email[], $email_form);
> > > > This way I can have multiple Email Addresses on this one form.  When I
> > > > do this it displays correctly but when I go to submit it fails
> > > > validation with the following output:
> > > > {{{
> > > > Unexpected extra form field named "Email".
> > > > }}}
>
> > > > I'm thinking there has to be some way to link the Email's user_id to
> > > > the new user, but I'm not sure of the proper way to do this.
>
> > > > Thanks in advance for any help.
>
> > > > --
> > > > Stephen Ostrow <[EMAIL PROTECTED]>
>
> > > --
> > > Jonathan H. Wage
> > > Open Source Software Developer &
> > Evangelisthttp://www.jwage.comhttp://www.doctrine-project.orghttp://
> >www.symfony-project.org
>
> --
> Jonathan H. Wage
> Open Source Software Developer & 
> Evangelisthttp://www.jwage.comhttp://www.doctrine-project.orghttp://www.symfony-project.org
--~--~---------~--~----~------------~-------~--~----~
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 [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to