我有以下操作来显示表单
public function showformAction() {
$this->view->form = new Form_MyForm();
$this->view->form->setAction( 'submitform' );
}
上面的操作只显示了一个textarea和提交按钮的表单。
我正在使用以下操作提交上述表单:
public function submitformAction() {
$form = new Form_MyForm();
$request = $this->getRequest();
if ( $request->isPost() ) {
$values = $form->getValues();
print_r($values);die();
} else {
echo 'Invalid Form';
}
}
以上操作显示以下输出:
Array ( [myfield] => )
这意味着它没有正确发布值并始终显示空数组或我没有正确获取发布值。如何将值发布到submitformAction()。
由于
答案 0 :(得分:5)
我认为在访问提交表单的值之前必须使用isValid()
,因为正确的是检查并定价值
public function submitformAction() {
$form = new Form_MyForm();
$request = $this->getRequest();
if ( $request->isPost() ) {
if ($form->isValid( $request->getPost() )) {
$values = $form->getValues();
print_r($values);die();
}
} else {
echo 'Invalid Form';
}
}
答案 1 :(得分:2)
补充@VAShhh响应。有一些更多细节:
您需要做两件事,使用POSTed数据填充表单字段,并将安全过滤器和验证器应用于该数据。 Zend_Form提供了一个执行两者的简单函数,它是isValid($data)
。
所以你应该:
所以你应该得到:
function submitformAction() {
$form = new Form_MyForm();
$request = $this->getRequest();
if ( $request->isPost() ) {
if (!$form->isValid($request->getPost())) {
$this->view->form = $form;
// here maybe you could connect to the same view script as your first action
// another solution is to use only one action for showform & submitform actions
// and detect the fact it's not a post to do the showform part
} else {
// values are secure if filters are on each form element
// and they are valid if all validators are set
$securizedvalues = $form->getValues();
// temporary debug
print_r($securizedvalues);die();
// here the nice thing to do at the end, after the job is quite
// certainly a REDIRECT with a code 303 (Redirect after POSt)
$redirector = $this->_helper->getHelper('Redirector');
$redirector->setCode(303)
->setExit(true)
->setGotoSimple('newaction','acontroller','amodule');
$redirector->redirectAndExit();
} else {
throw new Zend_Exception('Invalid Method');
}
}
正如在重新显示表单的代码中所说的那样,你真的尝试使用相同的功能来显示和处理POST,因为很多步骤都是一样的:
通过检测请求是POST,您可以检测到您处于POST处理案例中。