symfony - настраиваемая форма и обновление записей с помощью embedForm - PullRequest
1 голос
/ 21 апреля 2011

У меня небольшая проблема с embedForm, использующим доктрину и SF1.4

Я создал модуль, который пользователь может редактировать / создавать / удалять пользователей из определенной группы, используя sfDoctrineGuard

Форма - это просто пользовательская форма с именем manufacturerForm.class.php, которая расширяется sfGuardUserAdminForm

class manaufacturerForm extends sfGuardUserAdminForm
{
 public function configure()
 {
     $form = new sfGuardUserProfileForm();
     $this->embedForm('profile', $form);

     unset($this['firstname'], //this field is in sfGuardUserProfile is shown in form
           $this['user_id'],   //this field is in sfGuardUserProfile is shown in form
           $this['is_super_admin'], //this field is in sfGuardUser is not shown
           $this['is_admin'], // this filed is in sfGuardUser is not shown
           $this['permissions_list'], //this field is in sfGuardUser is not shown
           $this['groups_list']);//this field is in sfGuardUser is not shown
  }
}

Вы можете видеть, что я встраиваю sfGuardUserProfileForm в мой manufacturerForm.

У меня 2 проблемы, в sfGuardUserProfile есть поля, которые я не хочу отображать для этой конкретной формы, такие как: firstname, lastname, email_new, created_at, updated_at, но я не могу сбросить их, поскольку они все еще отображаются.

Обратите внимание, что в этом модуле администратора нет файла generator.yml. Я делаю все это в editSuccess.php и использую _form.php частичное.

Моя другая проблема - когда я редактирую существующего пользователя и сохраняю все хорошо. Проблема возникает, когда я пытаюсь редактировать, как я получаю следующее:

An object with the same "user_id" already exist. - это для поля user_id в sfGuardUserProfile, то же самое относится и к полю email_new. Я получаю An object with the same "email_new" already exist.

1) Как убрать ненужные поля?

2) Нужно ли перезаписывать какие-либо методы doSave (), updateObject (), saveEmbeddedForms (), чтобы остановить последнюю проблему?

Спасибо

1 Ответ

1 голос
/ 21 апреля 2011

Чтобы удалить поля из встроенной формы, вам необходимо сделать это в форме sfGuardUserProfileForm.Это потому, что поля доступны только для чтения, когда они встроены в manufacturerForm.

Если вам нужно удалить пользовательские поля из sfGuardUserProfileForm, которые вы обычно не делаете, просто расширьте класс, удалите поля и вставьте новую расширенную форму.встраивают форму, которую нужно передать в существующий объект sfGuardUserPofile.

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


class manaufacturerProfileForm extends sfGuardUserProfileForm
{
    public function configure()
    {
        unset($this['firstname'], //this field is in sfGuardUserProfile is shown in form
              $this['user_id'],   //this field is in sfGuardUserProfile is shown in form
              $this['is_super_admin'], //this field is in sfGuardUser is not shown
              $this['is_admin'], // this filed is in sfGuardUser is not shown
              $this['permissions_list'], //this field is in sfGuardUser is not shown
              $this['groups_list']);//this field is in sfGuardUser is not shown
     }
...