【问题标题】:Confirmation Dialog in Zend FrameworkZend 框架中的确认对话框
【发布时间】:2012-08-27 16:33:35
【问题描述】:

我正在构建一个 Zend 应用程序,它使用理论存储库类来更新、删除和插入数据到数据库。这些存储库是从控制器操作中调用的,它们完全按照他们应该做的事情做。但是,我想在应用程序中添加一些确认对话框,例如,如果用户想要编辑或删除一个项目,则必须首先打开一个确认编辑或删除对话框,数据将被编辑或删除,具体取决于用户选择什么。下面是一些操作代码示例,用于在用户单击 zend 表单提交按钮后更新员工详细信息。

public function updatestaffAction()
{        
    if ($this->getRequest()->isPost()) {
        if ($form->isValid($this->getRequest()->getPost())) {
            $values = $form->getValues();
            $user = $this->entityManager->find('\PTS\Entity\Staff', $values['staff_number']);
            $staffValues = array('staff_number' =>  $values['staff_number'],
                                 'title'        =>  $values['title'],
                                 'first_name'   =>  $values['first_name'],
                                 'last_name'    =>  $values['last_name'],
                                 'telephone'    =>  $values['telephone'],
                                 'cellphone'    =>  $values['cellphone'],
                                 'fax'          =>  $values['fax'],
                                 'email'        =>  $values['email'],
                                 'job_title'    =>  $values['job_title']);

            $this->staffRepository->saveStaff($staffValues);
            $this->entityManager->flush();
        }
    }

员工存储库 saveStaff 方法只是创建一个新的员工对象,如果员工不存在,则保留该对象,或者如果它是现有员工,则合并新数据,就像上面更新代码的情况一样。

所以我的问题是,如何更改操作以仅在用户单击确认对话框中的“是”按钮后才保存数据。顺便说一句,对话框可以是 JQuery 或 Dojo 对话框。

【问题讨论】:

  • 执行 JQuery 对话框确认并使用 Ajax post调用控制器连接点
  • 谢谢,但我不太确定该怎么做。我的控制器操作还创建了一个使用 viewscript 装饰器模式显示的 zend 表单。上面的代码在用户单击表单提交按钮时执行。我应该不使用提交按钮,而是使用调用对话框事件的普通按钮,如果是,我该如何调用控制器操作并提交表单数据?

标签: zend-framework dialog confirmation


【解决方案1】:

在创建表单提交按钮时,设置js代码:

$submit = new Zend_Form_Element_Submit('delete');

$submit->setAttrib(
'onclick', 
'if (confirm("Are you sure?")) { document.form.submit(); } return false;'
);

或者,如果您想在链接上设置对话框(如果您没有提交表单):

onclick="if (confirm('Are you sure?')) { document.location = this.href; } return false;"

showDialog 的代码:

$(function() {
    $( "#dialog:ui-dialog" ).dialog( "destroy" );

    $( "#dialog-confirm" ).dialog({
        resizable: false,
        height:140,
        modal: true,
        buttons: {
            "Are you sure": function() {
                                    // PUT your code for OK button, for eg.
                                    document.form.submit();
                $( this ).dialog( "close" );
            },
            Cancel: function() {
                $( this ).dialog( "close" );
            }
        }
    });
});`

【讨论】:

  • 嗨,谢谢你,我实际上已经想通了,但我实际上想使用自定义 jquery 或 dojo 对话框来代替。我可以将 onclick 属性添加到提交按钮,甚至可以将 onsubmit 属性添加到调用显示对话窗口的 showDialog 函数的表单,但我不知道如何从该对话窗口获取结果。任何帮助,将不胜感激。谢谢
【解决方案2】:

谢谢,我是这样使用第二个选项的:

<a href="<?=$this->url('skill', array('action'=>'delete', 'id' => $skill->getId()))?>" onclick="if (confirm('Are you sure?')) { document.location = this.href; } return false;">Delete</a>

它成功了:)

【讨论】:

    猜你喜欢
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多