Symfony 1.4
Propel (with sfPropel15Plugin)

I have a multilanguage Gallery with the following schema:


    # Galleries

      pi_gallery:
        _attributes:
          phpName: Gallery
          isI18N: true
          i18nTable: pi_gallery_i18n
        _propel_behaviors:
          sortable: ~
        id: ~
        active:
          type: boolean
          default: true
          required: true
        created_at: ~
        updated_at: ~

      pi_gallery_i18n:
        _attributes:
          phpName: GalleryI18n
        id:
          type: integer
          foreignTable: pi_gallery
          foreignReference: id
          required: true
          primaryKey: true
          onDelete: cascade
        culture:
          isCulture: true
          type: varchar
          size: 7
          required: true
          primaryKey: true
        name:
          type: varchar
          size: 255
          required: false
        description:
          type: longvarchar
          required: false

    # Images

      pi_gallery_image:
        _attributes:
          phpName: GalleryImage
          isI18N: true
          i18nTable: pi_gallery_image_i18n
        id: ~
        gallery_id:
          type: integer
          foreignTable: pi_gallery
          foreignReference: id
          required: true
        image:
          type: varchar
          size: 255
          required: true
        created_at: ~
        updated_at: ~


      pi_gallery_image_i18n:
        _attributes:
          phpName: GalleryImageI18n
        id:
          type: integer
          foreignTable: pi_gallery_image
          foreignReference: id
          required: true
          primaryKey: true
          onDelete: cascade
        culture:
          isCulture: true
          type: varchar
          size: 7
          required: true
          primaryKey: true
        description:
          type: varchar
          size: 255
          required: false


I'm trying to embed the Image forms in the Gallery using the following:

    # GalleryForm.class

        public function configure()
        {
            unset(
                $this['alias'],
                $this['created_at'],
                $this['updated_at']
            );

$this->widgetSchema['article_id']->setOption('renderer_class', 'sfWidgetFormPropelJQueryAutocompleter'); $this->widgetSchema['article_id']->setOption('renderer_options', array(
                    'model'     => 'Article',
                    'url'       => '/article/ajax'
            ));

            $this->validatorSchema['article_id'] = new sfValidatorPass();

            $this->embedI18n(array('es', 'en', 'de', 'it', 'fr'));

            $this->widgetSchema->setLabel('en','English');
            $this->widgetSchema->setLabel('es','EspaƱol');
            $this->widgetSchema->setLabel('de','Deutsch');
            $this->widgetSchema->setLabel('it','Italiano');
            $this->widgetSchema->setLabel('fr','Francais');

$this->embedRelation('GalleryImage'); // Embeds the Relation between the GalleryImage model and the Gallery Model
        }


    # GalleryImageForm.class:

        public function configure()
        {
            unset(
                $this['created_at'],
                $this['updated_at'],
                $this['gallery_id'],
                $this['sortable_rank']
            );

            if ($this->isNew()) unset($this['id']);

            $this->embedI18n(array('es', 'en', 'de', 'it', 'fr'));

            $image = $this->getObject()->getImage();

$template = (!is_null($image) || $image != "") ? '<div>%file%<br />%input%<br />%delete% %delete_label%</div>' : '';

$this->widgetSchema['image'] = new sfWidgetFormInputFileEditable(array(
                'label' => 'Imagen',
'file_src' => '/'.sfConfig::get('sf_upload_dir_name').'/images/galleries/thumbs/'.substr($this->getObject()->getImage(),0,-4) . '.jpg',
                'is_image' => true,
                'edit_mode' => !$this->isNew() && $image != "",
                'with_delete' => true,
                'delete_label'=>'Eliminar archivo existente',
                'template' => $template
            ));


$this->validatorSchema['image_delete'] = new sfValidatorPass();

            $this->validatorSchema['image'] = new sfValidatorFile(array(
'path' => sfConfig::get('sf_upload_dir').'/images/galleries',
                'required' => false,
                'mime_types' => 'web_images'
            ));
        }


This initially appears to embed the forms as expected. The GalleryForm appears with multi-language descriptions and the ImageForms embed beneath them. So far so good.

Saving the form however shows that all is not good.

Two records are saved, one with just the image and the other with just the i18n fields. The i18n fields also have the id of the second record added so there is no way of relating the image to the i18n fields. Maybe the order of saving the forms is wrong?

Am I doing it correctly?

Has anyone successfully got a form to work that embeds I18n in an embedded Relation? Or does anyone have any idea of a workaround? I've read about something about overriding saveEmbeddedForms but I don't even know where to start with that.

Any help appreciated.

--
If you want to report a vulnerability issue on symfony, please send it to 
security at symfony-project.com

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

Reply via email to