【问题标题】:embedForm saving problem - SymfonyembedForm 保存问题 - Symfony
【发布时间】:2011-01-14 13:42:12
【问题描述】:

我有这样的架构:

架构:

 article:
   id:                                      ~
   title:                                   { type: VARCHAR, size: '255', required: true }
   created_at:                              { type: TIMESTAMP, required: true }
   updated_at:                              { type: TIMESTAMP, required: true }

 article_data:
   id:                                      ~
   article_data:                            { type: BLOB, required: true } 
   article_filename:                        { type: VARCHAR, size: '255'}
   article_id:                              { type: INTEGER, required: true, foreignTable: article, foreignReference: id, onDelete: cascade }

所以,在我的文章管理模块中,我想显示 article_data 小部件,这是一个文件上传。

一切都很好。但是将上传的文件保存到服务器时,article_id 字段为空。

有没有办法获取文章的id并将其保存为article_data表的article_id?

谢谢

编辑:

我想我需要重写 saveEmbeddedForm() 方法,但我不确定我需要做什么。

有人可以帮忙写一些 saveEmbeddedForm() 的代码吗?

谢谢

【问题讨论】:

    标签: symfony1 symfony-1.4 propel


    【解决方案1】:

    我不知道 Propel,但在 Doctrine 中你可以这样做:

    class ArticleForm extends BaseForm
    {
      public function configure()
      {
        parent::configure();
    
        $form  = new sfForm();
        $datas = $this->getObject()->getDatas();
    
        foreach ($datas as $index => $data)
          $form->embedForm($index, new ArticleDataForm($data));
    
        $this->embedForm('dataForms', $form);
      }
    
      public function saveEmbeddedForm($con = null, $forms = null)
      {
        $dataForms = $this->getEmbeddedForm('dataForms')->getEmbeddedForms();
    
        foreach ($dataForms as $dataForm)
          $dataForm->getObject()->setArticle($this->getObject());
    
        parent::saveEmbeddedForm($con, $forms);
      }
    }
    

    【讨论】:

    • 感谢您的回复。我已经使用了您的代码并对其进行了一些修改。我用过: $this->embedForm('article_data', new ArticleDataForm());而不是您在配置中的代码,因为您的代码由于某种原因不显示输入小部件。此外,即使输入为空,它也会在我的表中创建一个新行。如果没有图像,我只需要它来创建一个新图像并在编辑时更新图像
    • 没关系。我做了一个一对多的关系。你有一对一的关系。然后只需在saveEmbeddedForm 函数中执行$this->getEmbeddedForm('article_data')->getObject()->setArticle($this->getObject())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2023-03-12
    • 2020-06-21
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多