开发者

Embedded i18n form in an embedded relation creates 2 records

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' =开发者_Python百科> sfConfig::get('sf_upload_dir').'/images/galleries',
            'required' => false,
            'mime_types' => 'web_images'
        ));
    }

This appears to embed the forms as expected ... initially. The GalleryForm appears with Multilanguage 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 initially, 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?

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.


Fixed in the sfPropelORMPlugin:

  • https://github.com/propelorm/sfPropelORMPlugin/issues/13
  • https://github.com/propelorm/sfPropelORMPlugin/pull/76
  • https://github.com/propelorm/sfPropelORMPlugin/issues/38
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜