Why don't you just unset() unused fields in FirmForm and FirmTranslationForm ?
On 9 nov, 10:42, dziobacz <aaabbbcccda...@gmail.com> wrote: > Creating i18n forms with only some fields from table isn't possible so > I give You my idea :) > > I have schema.yml: > Firm: > actAs: > I18n: > fields: [description, address] > columns: > id_firm: > type: integer(1) > primary: true > autoincrement: true > email: > type: string(100) > notnull: true > description: > type: clob > notnull: true > address: > type: clob > > I would like to create first form with only fields 'email' from table > Firm and 'address' from table Firm_translation (without field > 'description') so we must create action for example for edit in which > we get information about firm and pass it to the form, after submit we > take values from the form and save it: > public function executeEdit_contact(sfWebRequest $request) > { > $firma = Doctrine::getTable('Firm')->find($this->id_firm); > > $this->form = new ContactForm(null, array('firm' => $firm)); > if ($request->isMethod('post')) > { > $this->form->bind($request->getParameter($this->form->getName > ())); > if ($this->form->isValid()) > { > $email = $this->form->getValue('email'); > $contact_pl = $this->form->getValue('contact_pl'); > $contact_en = $this->form->getValue('contact_en'); > > > Doctrine::getTable('Firm')->actualizationContactFirm($this->id_firm, > $email, $contact_pl, $contact_en); > } > } > } > > Next create 2 fields per one i18n field - example: > class ContactForm extends sfForm > { > public function configure() > { > $this->widgetSchema['email'] = new sfWidgetFormInput(); > $this->widgetSchema['contact_pl'] = new sfWidgetFormTextarea(); > $this->widgetSchema['contact_en'] = new sfWidgetFormTextarea(); > > $firma = $this->getOption("firm"); //get array from the action > > $this->setDefault('email', $firm['email']); > $this->setDefault('contact_pl', $firm['Translation']['pl'] > ['contact']); > $this->setDefault('contact_en', $firm['Translation']['en'] > ['contact']); > > $this->setValidators(array( > 'email' => new sfValidatorEmail(array('max_length' => 100, 'trim' > => true)), > > 'contact_pl' => new sfValidatorString(array('min_length' => > 5, 'max_length' => 1000000, 'trim' => true)), > > 'contact_en' => new sfValidatorString(array('min_length' => 5, > 'max_length' => 1000000, 'trim' => true)), > )); > > $this->widgetSchema['contactt_pl']->setAttribute('rows', 20); > $this->widgetSchema['contact_pl']->setAttribute('cols', 70); > > $this->widgetSchema['contact_en']->setAttribute('rows', 20); > $this->widgetSchema['contact_en']->setAttribute('cols', 70); > > $this->widgetSchema->setNameFormat('data[%s]'); > } > > } > > And queries: > class FirmTable extends Doctrine_Table > { > public function actualizationContactFirm($id_firm, $email, > $contact_pl, $contact_en) > { > Doctrine_Query::create() > ->update('Firm') > ->set('email', '?', $email) > ->where('id_firm = ?', $id_firm) > ->execute(); > > Doctrine_Query::create() > ->update('FirmTranslation') > ->set('contact', '?', $contact_pl) > ->where('lang = ?', 'pl') > ->andWhere('id_firm = ?', $id_firm) > ->execute(); > > Doctrine_Query::create() > ->update('FirmTranslation') > ->set('contact', '?', $contact_en) > ->where('lang = ?', 'en') > ->andWhere('id_firm = ?', $id_firm) > ->execute(); > } > > } > > I think this is the best solution, unfortunately we have many repeat > code but I think we can't write it easier:( --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---