关于如何在Symfony中嵌入表单的示例

时间:2010-02-25 16:03:49

标签: symfony1 symfony-forms

我在Ubuntu 9.10上使用Symfony 1.3.2和Propel ORM。

我有一个用户配置文件表,其中有许多其他表链接到它(即user_profile.id是许多其他表中的FK。

我的数据库架构看起来像这样:

user_profile:
  _attributes: { phpName: UserProfile }
  id: ~
  guard_id:  { type: integer, foreignTable: sf_guard_user, foreignReference: id, required: true }
  address:   { type: longvarchar, required: true }

vehicle_type:
  _attributes: { phpName: VehicleType }
  id: ~
  name: { type: varchar(32), required: true }


user_vehicle:
  _attributes: { phpName: UserVehicle }
  id: ~
  user_id:  { type: integer, foreignTable: user_profile, foreignReference: id, required: true }
  vehicle_type: { type: integer, foreignTable: vehicle_type, foreignReference: id, required: true }
  license_plate:     { type: varchar(16), required: true }


user_child:
  _attributes: { phpName: UserChild }
  id: ~
  user_id:  { type: integer, foreignTable: user_profile, foreignReference: id, required: true }
  gender:   { type: boolean, required: true }
  name:     { type: varchar(32), required: true }

我想在用户配置文件表单中嵌入链接到用户配置文件对象的其他对象,这样当我在用户配置文件表单上执行CRUD时,相关对象(例如UserVehicle,UserJob也是CRUD at与用户个人资料对象同时进行。)

我需要一个简单的代码段,展示如何:

  1. 将各种相关对象(即UserVehicle,UserChild)嵌入到UserProfile表单中
  2. 在进行操作时创建/更新/删除各种相关对象(请注意,用户可以拥有超过0-N辆车或分配给他们的子项

2 个答案:

答案 0 :(得分:3)

您是否阅读过documentation?:

// lib/form/doctrine/ProductForm.class.php
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);
}

对于创建/删除/更新部分,this article可能会提供一些帮助。

答案 1 :(得分:0)

我从来没有找到适合我需要的官方方法。我开发了一种完全不同的方法。在我以前工作的公司,我们在生产this new approach中使用,发现它更有弹性和简单。关键概念是“不要使用Symfony的Form类,你会发现嵌入表单可以是一个非常简单的任务” 我希望这可以帮助您嵌入表单。