динамически встраиваемые формы - PullRequest
0 голосов
/ 21 июля 2011

Я пытаюсь динамически добавлять формы встраивания, используя одну таблицу в моей схеме.

Что я имею в виду под этим, в моей таблице 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);
    }
}

У меня также есть nurseForm, который снова расширяет 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?

Манай спасибо

1 Ответ

0 голосов
/ 22 июля 2011

Я бы настоятельно рекомендовал сначала переосмыслить вашу схему.Вам действительно нужно хранить все сущности в одной таблице?

Вместо этого используйте разные сущности (классы) со своими конкретными полями, которые относятся к sfGuardUser.Например:

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

Затем вы можете встроить отношение медсестры в sfGuardUserForm:

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

Или наоборот:

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

И сделатьто же самое для всех других лиц.Однако, если вы чувствуете, что ваши сущности в значительной степени одинаковы, вы можете взглянуть на наследство Доктрины, хотя обычно на него не соглашаются.

...