我有一个名为main
的模块,它是我的默认模块和一个名为song
的模块。
我想在main
模块中加入song
模块的“添加表单”。
我不知道是否必须使用组件,如何以及在何处处理表单。
你能帮我吗?
答案 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());