我有一个创建新“组”的表格。我现在添加了一个小的“返回”图像,用户应该能够使用它返回一步。我不知道为什么,但是当我单击这个新图像时,用于我要离开的表单(/admin/creategroup)的控制器和操作会再次调用并设置 HTTP POST。因此,表单验证已完成,我被困在此表单上,显示验证错误。
这是我的表单中带有两个图像按钮的代码片段。我不希望“返回”图像将我重定向到指定的控制器而不验证表单:
$this->addElement('image', 'btnBack', array (
'name' => 'btnBack',
'id' => 'btnBack',
'label' => '',
'title' => 'Go back',
'alt' => 'Go back',
'src' => '/img/undo.png',
'onClick' => "window.location='/admin/groupoverview'"
));
$this->addElement('image', 'btnSave', array (
'name' => 'btnSave',
'id' => 'btnSave',
'label' => '',
'title' => 'Save this new group',
'alt' => 'Save this new group',
'src' => '/img/save.png',
'onClick' => "document.forms[0].submit();"
));
编辑:
我已经想到了检查/admin/creategroup是否是从“btnBack”图像或“btnSave”图像调用的可能性,如果源是“btnBack”图像,则跳过表单验证并正确重定向.
我只是认为应该有一个更好的解决方案来直接从表单重定向并规避再次调用/admin/creategroup。
Edit2:
我的视图脚本:
<div id="createGroupMask">
<br/>
Use the form below to create a new group
<?php
$this->form->setAction($this->url());
echo $this->form;
?>
</div>
我在控制器中的操作:
public function creategroupAction()
{
$form = new Application_Form_CreateGroup();
$request = $this->getRequest();
if ($request->isPost()) {
if ($form->isValid($request->getPost())) {
// Data for new group is valid
...
} else {
// Form data was invalid
// => This is where I land when pressing the 'back' image
// No further code here
}
}
$this->view->form = $form;
}