【问题标题】:Symfony EmbedFormSymfony 嵌入表单
【发布时间】:2010-11-05 20:50:22
【问题描述】:

这是我的情况,我有 3 张桌子:学生 | 附件 | 学生_attachment_链接

学生表通过与链接表的 classRef 关系链接到附件表,就像附件表到学生表一样。

relations:
Students:
  class: Student
  refClass: StudentAttachmentLink
  local: attachment_id
  foreign: student_id

relations:
Attachments:
  class: Attachment
  refClass: StudentAttachmentLink
  local: student_id
  foreign: attachment_id

所以需要将附件表单嵌入到学生表单中,这样在编辑学生时我可以选择上传新文件(附件)

我浏览了文档,里面有一个很棒的例子Here

在本例中,他们设置了一个子表单,然后通过将当前对象设置为正在设置的新对象,将表单绑定在一起,如下所示:

public function configure()
{
  $subForm = new sfForm();
  for ($i = 0; $i < 2; $i++)
  {
    $productPhoto = new ProductPhoto();
    $productPhoto->Product = $this->getObject();

    $form = new ProductPhotoForm($productPhoto);

    $subForm->embedForm($i, $form);
  }
  $this->embedForm('newPhotos', $subForm);
}

您可以在此示例中看到 $productPhoto->Product = $this->getObject();
建立要维护的关系

现在我知道的秘密是,这是一个多对一的关系,但是我有一个多对多的关系,所以我执行以下操作:

  public function configure()
  {
      $attachment = new Attachment();
      $attachment->Student = $this->getObject();

      $form = new AttachmentForm($attachment);
      $this->embedForm('newFile',$form);
  }

这会产生一个错误: 无法调用 Doctrine_Core::set(),在设置多对多引用时,第二个参数应该是 Doctrine_Collection 的实例。

我很困惑,因为我认为我的对象是一个 Doctrine_Collection,非常感谢任何帮助!

更新:
也许我在问错误的问题或解决仅部分相关的单点故障。我想要做的是能够从学生表单中添加/删除附件并将其与该学生相关,而无需自定义 formAction 和 save() 操作。我发现使用 Symfony 1.4 我可以使用:

$this->embedRelation('Attachments');

这项工作对于编辑来说非常棒学生表格中的附件,即添加/删除/更新附件。

也欢迎任何关于更好的方法的建议,即我是否应该在我的学生表格中有一个“添加附件”链接,将我带到附件/新页面,但如果我这样做,我该如何通过它是当前的学生,因此该选项可以自动化...我有很多要学习的框架:-/

【问题讨论】:

  • 您可以编辑您的帖子,不是吗?如果没有,我会为你做的。现在,正如我告诉您的那样,您使用的示例是一对多关系。您的表单是关于单个学生对象的,并且您正在尝试设置一个集合。它不能工作。

标签: forms symfony1 doctrine embed


【解决方案1】:

我想如果你为你的关系使用正确的命名,你会很快理解这个问题:

relations:
  Students:
    refClass: StudentAttachmentLink
    local: attachment_id
    foreign: student_id

relations:
  Attachments:
    refClass: StudentAttachmentLink
    local: student_id
    foreign: attachment_id

标记“s”'。这是多对多的关系。您使用的示例是一对多关系。

【讨论】:

  • 以上评论还成立吗?
【解决方案2】:

像上一个答案一样,您不能嵌入具有多对多关系的表格,也许您需要将关系更改为多对一,因为我认为一个附件不属于许多学生,但如果那是如果您不能像 symfony 文档示例那样在学生中嵌入附件,但您可以按照以下步骤操作:

http://di-side.com/di-side/services/web-solutions/symfony-embedrelation-many-to-many-doctrine-relations/

如果您更改关系,您可以使用本教程包含 jquery 函数,以便将表单或表单的一部分动态嵌入到另一个中

http://tech.cibul.net/embedded-forms-with-symfony-1-4-and-jquery/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 2017-08-04
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多