Hi, I'm trying to do something that is close to what is described in http://www.symfony-project.org/advent_calendar/9/en.
To start with, I'm using sfDoctrineGuard and I want to be able to define user accounts connected to either Persons or Firms.Person and Firm are two entities that both inherit a common Contact entity. I have added the schema I am using to the end of this message[1]. In the ContactForm class I embedd a subclass[2] of sfGuardUserAdminForm into the form: // in configure() $form = new ContactUserForm($this->getObject()->user ); if ($form->getObject()->id == null) unset($form['id']); $this->embedForm("sfguarduser_id", $form); // and set up a postValidator. $this->mergePostValidator(new ContactUserValidatorSchema()); I have also added a saveEmbeddedForms to the ContactForm class: public function saveEmbeddedForms($con = null, $forms = null) { if (null === $forms) { $user = $this->getValue('sfguarduser_id'); if ($user == null) { $forms = $this->embeddedForms; unset($forms['sfguarduser_id']); } } return parent::saveEmbeddedForms($con, $forms); } The ContactUserValidatorSchema class is also attached, but I think this part of the setup is correctl. What I want to do is that if the username and password fields of the embedded schema are empty, then I do not want a user object to be created. As it stands now, an object is created with the username set to "". This only works the first time of course as the username has to be unique. I hope someone has an idea on what I am doing wrong here. I seem to have misunderstood something simple - I just wish I knew what. Tarjei 1. Schema: Contact: columns: firstname: string(255) lastname: string(255) jobRole: string(255) # stilling mobile: string(255) phone: string(255) email: string(255) description: string(255) post_address_id: integer sfguarduser_id: integer(4) relations: postAddress: class: Address type: one foreignType: one foreign: id local: post_address_id cascade: [delete] user: class: sfGuardUser local: sfguarduser_id cascade: [delete] Person: inheritance: extends: Contact type: column_aggregation keyField: type keyValue: 2 (There is also another subclass that I have omitted to make this post as short as possible). 2. class ContactUserForm extends sfGuardUserAdminForm { public function configure() { parent::configure(); foreach (array('username', 'password') as $key ) { $this->validatorSchema[$key]->setOption('required', false); } } } 3. class ContactUserValidatorSchema extends sfValidatorSchema { protected function configure($options = array(), $messages = array ()) { } protected function doClean($values) { $errorSchema = new sfValidatorErrorSchema($this); /* return at once if the values are missing */ if (!isset($values['sfguarduser_id']) || !$values ['sfguarduser_id']) { return $values; } $userFormValues = $values['sfguarduser_id']; $errorSchemaLocal = new sfValidatorErrorSchema($this); // username is filled but no password if ($userFormValues['username'] && !$userFormValues['password']) { $errorSchemaLocal->addError(new sfValidatorError($this, 'required'), 'password'); } // password is filled but no username if ($userFormValues['password'] && !$userFormValues['username']) { $errorSchemaLocal->addError(new sfValidatorError($this, 'required'), 'username'); } // no password and no username, remove the empty values if (!$userFormValues['username'] && !$userFormValues['password']) { unset($values['sfguarduser_id']); } // some error for this embedded-form if (count($errorSchemaLocal)) { $errorSchema->addError($errorSchemaLocal, (string) "sfguarduser_id"); } // throws the error for the main form if (count($errorSchema)) { throw new sfValidatorErrorSchema($this, $errorSchema); } return $values; } } -- You received this message because you are subscribed to the Google Groups "symfony users" group. To post to this group, send email to symfony-us...@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.