动态嵌入表单

时间:2011-07-21 16:09:03

标签: symfony1 symfony-1.4

我正在尝试使用我的架构中的单个表动态添加嵌入表单。

我的意思是,在我的sfGuardUserProfile表中,我有很多字段来确定用户是什么,即practice_id,nurse_id,patient_id

因此,考虑到这一点,我正在尝试动态地将护士添加到实践中。

我有一个练习表单,扩展sfGuardUserAdminForm,扩展sfGuardUser,这样我就可以获得存储在sfGuardUser表中的用户名,密码等。

在我的practiceForm中,我嵌入了practiceProfileform,它显示了sfGuardUserProfile表中我需要的字段。我希望每个人都关注......

这很好用,我看到两个表中的字段。

现在,我现在不知道该怎么办:嵌入护士。我特别不确定如何做到这一点,因为练习和护士要保存在同一张桌子里。

practiceForm

class Practiceform extends sfGuardUserAdminForm 
{
    public function configure()
    {
       $form = new PracticeProfileForm($this->getObject()->getProfile());
       $this->embedForm('profile', $form);
    }
}

我还有一个护士形式,再次扩展sfGuardUser,嵌入一个nurseProfileForm,扩展sfGuardUserProfile以获取我需要的字段。

nurseForm

class dentistForm extends sfGuardUserAdminForm 
{
    public function configure()
    {
       $profileForm = new nurseProfileForm($this->object->Profile);
       $this->embedForm('profile', $profileForm);

{

}

我的schema.yml如下:

sfGuardUserProfile:
  actAs:
    Timestampable: ~
  columns:
    user_id:
      type: integer(11)
      notnull: true
      default:
      unsigned: false
      primary: false
      unique: false
      autoincrement: false
    email_new:
      type: string(255)
      unique: true
    firstname:
      type: string(255)
    lastname:
      type: string(255)
    practice_id:
      type: integer(11)
    nurse_name:
      type: varchar(255)
    practice_name:
      type: varchar(255)
    practice_type:
      type: varchar(255)
    validate_at:
      type: timestamp
    validate:
      type: string(33)
  relations:
    User:
      class: sfGuardUser
      foreign: id
      local: user_id
      type: one
      onDelete: cascade
      foreignType: one
      foreignAlias: Profile
   Practice:
      class: sfGuardUserProfile
      foreign: id
      local: practice_id
      type: one
      onDelete: cascade
  indexes:
    validate:
      fields: [validate]

是否有一种简单的方法可以使用我目前使用Doctrine / SF1.4的模式/表格动态添加这些护士?

Manay谢谢

1 个答案:

答案 0 :(得分:0)

我强烈建议您首先重新考虑您的架构。你真的需要将所有实体存储在一个表中吗?

相反,让不同的实体(类)具有与sfGuardUser相关的特定字段。例如:

Nurse:
  columns:
    account_id: integer(4)
    name: string(255)
    ...
  relations:
    Account:
      class: sfGuardUser
      local: account_id
      foreign: id
      type: one
      foreignType: one

然后,您可以在您的sfGuardUserForm中嵌入Nurse关系:

class sfGuardUserForm
{
    public function configure()
    {
       $this->embedRelation('Nurse');
    }
}

或者,反过来说:

class NurseForm
{
    public function configure()
    {
       $this->embedRelation('Account');
    }
}

对所有其他实体也这样做。但是,如果你觉得你的恩赐几乎一样,你可以看看Doctrine的继承,虽然它通常不受欢迎。