如何在保存数据时显示模态窗口

时间:2013-03-11 14:49:22

标签: jquery twitter-bootstrap symfony-1.4 symfony-forms

当我在Symfony中保存一些数据时,我想要显示一个模态窗口(Twitter Bootstrap Modal Component)。我使用doctrine:generate-module任务来构建模块,但是当我点击" Save"时,我不知道如何显示窗口。按钮和数据已保存。有什么建议吗?

编辑:从doctrine:generate-admin(错误)更改为doctrine:generate-module(right)

1 个答案:

答案 0 :(得分:3)

对于保存当前对象的每个操作,生成器使用成功消息定义a flash message

您可以在action template of the generator

中看到它们
$this->getUser()->setFlash('notice', $notice);

闪烁消息随后显示在名为_flashes.php的模板中。如果一切正常,则会在操作中定义通知闪烁并显示:

<div class="notice">[?php echo __($sf_user->getFlash('notice'), array(), 'sf_admin') ?]</div>

您需要做的是在模板文件夹中创建文件_flashes.php并编写javascript以打开引导模式。类似的东西:

<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
    <h3 id="myModalLabel">Modal header</h3>
  </div>
  <div class="modal-body">
    <p><?php echo __($sf_user->getFlash('notice'), array(), 'sf_admin') ?></p>
  </div>
</div>

<script type="text/javascript">
    $('#myModal').modal('show')
</script>

此案例仅涵盖通知讯息。您还必须覆盖错误一个。


<强>更新

由于您使用的是Doctrine生成模块而不是Doctrine Admin Generator,因此您必须执行此操作才能使用闪烁消息:

在您的操作中,找到processForm并添加通知:

protected function processForm(sfWebRequest $request, sfForm $form)
{
    $notice = $form->getObject()->isNew() ? 'The item was created successfully.' : 'The item was updated successfully.';

    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
        $alumnos = $form->save();

        $this->getUser()->setFlash('notice', $notice);

        $this->redirect('alumnos/new');
        // $this->redirect('alumnos/edit?id=' . $alumnos->getId());
    }
    else
    {
        $this->getUser()->setFlash('error', 'The item has not been saved due to some errors.', false);
    }
}

然后,您可以添加之前创建的相同_flashes.php模板并将其包含在newSuccess.php中,因为您在保存表单后将用户重定向到此操作):

<?php include_partial('flashes') ?>