Zend表单删除按钮

时间:2012-05-31 13:15:51

标签: button zend-framework zend-form factory

这听起来很容易,但对我来说这很麻烦。我一直在编写一个表单来编辑已经存在的数据库条目。根据连接表中的记录创建和填充某些字段。

这听起来有点粗略,所以我会试着说明一下。我有一个名为Content的内容表和一个名为Files的表,其中包含文件名和位置。我根据提供的内容ID获取文件名,然后表单创建字段,然后用文件名填充这些字段。

public function setFiles($files) {
    $i = 0;
    foreach ($files as $file) {
        $i++;
        $fieldname = "encloseditemname{$i}";
        $this->addElement('text', $fieldname, array('required'       => true,
                                                        'label'          => 'Enclosed item name (test)',
                                                        'value'          => $file['file_url'],
        ));
    }
}

这完全正常,但现在我想添加一个按钮,允许我删除其中一个文件。所以我认为应该做的是在控制器中创建一个fileDeleteAction(),然后让按钮重定向到该操作,让它删除数据库中的条目,然后使用表单呈现视图。

让动作呈现不同的视图,然后是标准视图,而不是问题。编写代码来删除数据库中的条目,也不是问题。使用addElements方法创建一个重定向到删除操作的按钮作为工厂...大量问题。这是我有多远。

$this->addElement('button', "deleteencloseditem{$i}", array( ??? ));

如何让此按钮重定向到删除操作,而不会影响我的表单底部的提交按钮,该按钮用于提交表单并调用我的控制器中的editAction。

我已经研究过使用一些javascript来检测按下了哪个按钮但是我还没有在家中使用javascript而且我无法找到如何找出按下哪个按钮,因为按钮名称和id依赖于setFiles函数因此可以在deleteencloseditem1deleteencloseditem5000之间,具体取决于它推入表单的文件名数量。

我怎样才能完成这项工作?任何提示或建议都非常感谢:)

3 个答案:

答案 0 :(得分:1)

HTML <form>只能有一个action属性,表单在提交时会被路由到该属性。但是,客户端和服务器端都有解决方法。

服务器端

  1. 让所有按钮只提交到您的表单action(在您的表单代码中由$this->setAction(...)设置)
  2. 在此操作中,通过查看post(或get)变量确定点击了哪个按钮
  3. 根据点击的按钮重定向到正确的操作
  4. 客户端

    使用按钮的click事件来确定单击了哪个按钮。我假设按钮的ID会告诉您有关要删除的文件的信息。假设您给所有删除按钮class="delete",您可以使用jQuery执行以下操作:

    $('input.delete').click(function(){
        // remove 'deleteencloseditem' from the button's ID
        // to only keep the file number
        var myFileID = $(this).attr('id').replace('deleteencloseditem', '');
        window.location.href = 'myLocation?fileID=' + myFileID;
    });
    

答案 1 :(得分:0)

只需使用路由。表单路由意味着将action指向相应的路由。表单操作中的路径将导致ZF中的路由使用关联的控制器和操作。

答案 2 :(得分:0)

解决此问题的最简单方法是使用链接进行删除操作,然后将其设置为按钮。

或者你可以使用两个按钮和一个表格,你只需要用不同的方式标记它们,并在POST上测试标签名称。

if ($this->getRequest()->getPost('submit') == 'Label')