Как создать несколько наборов записей для каждого выбранного флажка - PullRequest
1 голос
/ 20 января 2012

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

В псевдо-разметке это должно выглядеть так:

[выберите] Журнал [/ выбрать]

[флажок] Выпуск 1 [флажок]

[флажок] Выпуск 2 [флажок]

[флажок] Выпуск 3 [флажок]

[флажок] Выпуск 4 [флажок]

[флажок] Выпуск 5 [флажок]

Если форма сохранена, она должна создать один набор записей для каждого выбранного флажка. Идентификатор рекламы передается в форму через URL.

Я попробовал несколько подходов, чтобы достичь этого, но я придерживался этого уже несколько недель и надеюсь, что кто-то здесь может мне помочь.

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

Должен ли я создать рекламную форму и вставить в нее форму глиссирования? Я всегда пробовал это напрямую с помощью Строгания.

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

Advertisement:
  columns:
    title:                  { type: string(100), notnull: true }

Issue:
  columns:
    magazine_id:            { type: integer, notnull: true }
    number:                 { type: string(10), notnull: true }
  relations:
    Magazine:
      local: magazine_id
      foreign: id
      foreignAlias: Issues
      type: one
      foreignType: many

Magazine:
  columns:
    title:                  { type: string(100) }

Planing:
  columns:
    advertisement_id:           { type: integer, notnull: true }
    magazine_id:                { type: integer, notnull: true }
    issue_id:                   { type: integer, notnull: true }
  relations:
    Issue:
      local: issue_id
      foreign: id
      foreignAlias: Planings
      type: one
      foreignType: many
    Advertisement:
      local: advertisement_id
      foreign: id
      foreignAlias: Planings
      type: one
      foreignType: many
    Magazine:
      local: magazine_id
      foreign: id
      foreignAlias: Planings
      type: one
      foreignType: many 

1 Ответ

1 голос
/ 17 февраля 2012

Если я правильно понимаю (позвольте мне проверить: вы хотите показывать рекламу в определенных выпусках определенных журналов?), Тогда как насчет этого?

Используйте отношение объекта Planing к объекту Issue, один ко многим, а затем используйте встроенный sfWidgetFormChoice, как описано в блоге Symfony здесь: http://symfony.com/blog/new-in-symfony-1-2-make-your-choice (прокрутите вниз до «Сгруппировать свой выбор») ).

Таким образом, вместо использования sfWidgetFormDoctrineChoice, используйте его родительский элемент и напишите свой собственный метод для построения массива проблем, сгруппированных по журналам, которые хранятся во вложенном массиве. Вы можете переопределить виджет в вашей конфигурации PlaningForm следующим образом:

$this->widgetSchema['issues_list'] = new sfWidgetFormChoice(array(
  'multiple' => true,
  'expanded' => true,
  'choices'  => Doctrine_Core::getTable('Issue')->getIssuesForSelect(),
));

Затем добавьте метод к IssueTable.class.php, который возвращает вложенный массив идентификаторов выпусков с заголовками, сгруппированными по названию журнала, который должен выглядеть примерно так:

array(
  'Magazine 1' => array(
    17 => 'Issue 1',
    18 => 'Issue 2',
    28 => 'Issue 3',
  ),
  'Magazine 2' => array(
    11 => 'Issue 26',
    19 => 'Issue 27',
    29 => 'Issue 28',
  ),
);
...