Symfony EmbedForm - PullRequest
       9

Symfony EmbedForm

1 голос
/ 05 ноября 2010

Вот моя ситуация, у меня есть 3 таблицы: студент | приложение | student _attachment_ link

Таблица студента связана с таблицей вложений через связь classRef с таблицей ссылок, как и таблица вложений к таблице Student.

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

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

Итак, что нужно, - это вложить форму приложения в форму студента, чтобы при редактировании студента у меня была возможность загрузить новый файл (вложение)

Я ушелчерез документацию, которая имеет фантастический пример Здесь

В этом примере они устанавливают подчиненную форму, а затем связывают формы, устанавливая текущий объект в новый, настраиваемый следующим образом:

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');

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

Также приветствуются любые предложения о лучшем способе сделать это, то есть, если я просто добавлю ссылку «Добавить вложение» в форму студента, которая приведет меня на страницу «Вложение / новая страница», но если я это сделаю, то какпередать ли это текущему студенту, чтобы этот параметр можно было автоматизировать ... Мне нужно многое узнать об этой структуре: - /

Ответы [ 2 ]

0 голосов
/ 20 мая 2013

Как и в предыдущем ответе, вы не можете встроить форму со многими отношениями ко многим, может быть, вам нужно изменить отношение со многими на одно, потому что я не думаю, что одна привязанность принадлежит многим студентам, но если этоЕсли вы не можете встроить вложение в студента, как пример документации 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/

0 голосов
/ 06 ноября 2010

Я думаю, вы бы быстро поняли проблему, если бы использовали правильные имена для ваших отношений:

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

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

Отметьте «с». Это отношения многие ко многим. Пример, который вы используете, касается отношения один ко многим.

...