【问题标题】:Embedded i18n form in an embedded relation creates 2 records嵌入关系中的嵌入 i18n 表单创建 2 条记录
【发布时间】:2011-05-06 22:08:02
【问题描述】:

Symfony 1.4 推进(使用 sfPropel15Plugin)

我有一个具有以下架构的多语言库:

# 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

我正在尝试使用以下方法将图像表单嵌入到库中:

# 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'
        ));
    }

这似乎按预期嵌入了表单......最初。 GalleryForm 与多语言描述一起出现,ImageForms 嵌入在它们下方。到目前为止一切顺利。

但是保存表单表明一切都不好。

最初保存了两条记录,一条仅包含图像,另一条仅包含 i18n 字段。 i18n 字段还添加了第二条记录的 id,因此无法将图像与 i18n 字段相关联。可能是表格保存顺序不对?

有没有人成功地获得了一个将 I18n 嵌入到嵌入式关系中的表单?或者有人知道解决方法吗?我读过一些关于覆盖 saveEmbeddedForms 的文章,但我什至不知道从哪里开始。

任何帮助表示赞赏。

【问题讨论】:

    标签: symfony1 symfony-1.4 propel


    【解决方案1】:
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多