Forms 如何为每个选中的复选框创建多个记录集

Forms 如何为每个选中的复选框创建多个记录集,forms,symfony1,doctrine,symfony-1.4,Forms,Symfony1,Doctrine,Symfony 1.4,我有下面的模式,我想用Symfony 1.4和doctor创建一个表单,用户可以从选择框中选择一本杂志,然后单击几个复选框,其中每个复选框都是一期 在伪标记中,它应该如下所示: [select]杂志[/select] [复选框]第1期[复选框] [复选框]第2期[复选框] [复选框]第3期[复选框] [复选框]第4期[复选框] [复选框]第5期[复选框] 如果表单已保存,则应为选中的每个复选框创建一个记录集。广告ID通过url传递给表单 我尝试了几种方法来实现这一点,但我坚持了几个星期,希望这里

我有下面的模式,我想用Symfony 1.4和doctor创建一个表单,用户可以从选择框中选择一本杂志,然后单击几个复选框,其中每个复选框都是一期

在伪标记中,它应该如下所示:

[select]杂志[/select]

[复选框]第1期[复选框]

[复选框]第2期[复选框]

[复选框]第3期[复选框]

[复选框]第4期[复选框]

[复选框]第5期[复选框]

如果表单已保存,则应为选中的每个复选框创建一个记录集。广告ID通过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 
如果我理解正确(让我检查一下:你想在某些杂志的某些期刊上刊登广告吗?)

使用从规划对象到问题对象的一对多关系,然后使用内置的sfWidgetFormChoice,如Symfony博客所述:(向下滚动至“分组您的选择”)

因此,不要使用sfWidgetFormDoctrineChoice,而是使用其父级并编写自己的方法来构建问题数组,按杂志分组,存储在嵌套数组中。您可以在PlaningForm配置中覆盖小部件,如下所示:

$this->widgetSchema['issues_list'] = new sfWidgetFormChoice(array(
  'multiple' => true,
  'expanded' => true,
  'choices'  => Doctrine_Core::getTable('Issue')->getIssuesForSelect(),
));
然后将该方法添加到
IssueTable.class.php
中,该方法返回一个带有标题的问题ID嵌套数组,按杂志标题分组,看起来应该类似于:

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',
  ),
);
如果我理解正确(让我检查一下:你想在某些杂志的某些期刊上刊登广告吗?)

使用从规划对象到问题对象的一对多关系,然后使用内置的sfWidgetFormChoice,如Symfony博客所述:(向下滚动至“分组您的选择”)

因此,不要使用sfWidgetFormDoctrineChoice,而是使用其父级并编写自己的方法来构建问题数组,按杂志分组,存储在嵌套数组中。您可以在PlaningForm配置中覆盖小部件,如下所示:

$this->widgetSchema['issues_list'] = new sfWidgetFormChoice(array(
  'multiple' => true,
  'expanded' => true,
  'choices'  => Doctrine_Core::getTable('Issue')->getIssuesForSelect(),
));
然后将该方法添加到
IssueTable.class.php
中,该方法返回一个带有标题的问题ID嵌套数组,按杂志标题分组,看起来应该类似于:

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

我应该补充的是,这看起来与您要求的不太一样(选择会更改复选框),但您可以在页面加载后使用javascript添加该行为。我应该补充的是,这与您要求的不太一样(选择会更改复选框),但您可以在页面加载后使用javascript添加该行为。