添加另一个模块的表单

时间:2012-09-26 09:54:56

标签: symfony1 symfony-1.4 symfony-forms

我有一个名为main的模块,它是我的默认模块和一个名为song的模块。

我想在main模块中加入song模块的“添加表单”。

我不知道是否必须使用组件,如何以及在何处处理表单。

你能帮我吗?

1 个答案:

答案 0 :(得分:0)

你查过文件了吗?特别是this part of the doc

它使用基本联系表格覆盖表格系统:

  • 您拥有控制器(actions.class.php模块中的main),它可以创建表单实例并处理提交(验证,保存等)。
  • 然后是模板(contactSuccess.php),显示表单

主要区别在于你可能有一个名为Song的模型,所以你必须使用SongForm而不是创建一个新的(使用new sfForm())。对于此部分,您可以在同一文档页面上看到涵盖文章模型案例的部分Forms Based on a Model

修改

一步一步:

main/actions/actions.class.php

public function executeIndex($request)
{
  $this->form = new SongForm();
  if ($request->isMethod('post'))
  {
    $this->form->bind($request->getParameter('song'));
    if ($this->form->isValid())
    {
      $song = $this->form->save();

      $this->getUser()->setFlash('notice', 'Thank you, the song has been added');

      $this->redirect('main/index');
    }
  }
}

在您的模板中,main/templates/indexSuccess.php

<?php if ($sf_user->hasFlash('notice')): ?>
  <div class="flash_notice"><?php echo $sf_user->getFlash('notice') ?></div>
<?php endif ?>

<?php echo $form->renderFormTag('main/index') ?>
  <table>
    <?php echo $form ?>
    <tr>
      <td colspan="2">
        <input type="submit" />
      </td>
    </tr>
  </table>
</form>

你已经完成了。

真的鼓励您阅读整个Jobeet tutorial。你会学到很多东西。基本上我在这里描述的每件事都在本教程中。

对于sf_guard_user字段,您应将其重新定义为隐藏,然后使用当前连接的用户设置默认值。

创建新表单:/lib/form/CustomSongForm.class.php

<?php

class CustomSongForm extends SongForm
{
  public function configure()
  {
    parent::configure();

    $this->widgetSchema['sf_guard_user_ud'] = new sfWidgetFormInputHidden();
  }
}

然后你可以像你说的那样定义默认值:

}$this->form->setDefault('sf_guard_user_id', $this->getUser()->getId());