Zend框架下表单如何向控制器的Action方法传递参数?
解决Zend框架中表单提交与控制器参数传递的问题
我来帮你梳理下问题,你现在遇到的核心是Zend框架下表单路由规则没理清,还有代码里的几个小语法错误,咱们一步步解决:
1. 先修正表单里的语法错误
你的表单代码里有两处低级错误,会直接导致提交失败:
- 属性赋值用了双等号
==,应该是单等号=(比如name=="downloadFile"改成name="downloadFile") - 隐藏域的value里没加
echo,PHP短标签里只写变量不会输出内容,比如<?php $elem['evt_id']?>要改成<?php echo $elem['evt_id']?>
2. 表单action属性的正确写法
在Zend框架里,表单的action要指向控制器+Action的路由路径,而不是直接写方法名加括号。默认路由规则是:
/控制器名(去掉Controller后缀)/Action名(去掉Action后缀)
举个例子:如果你的控制器类是DownloadController.php(必须带Controller后缀),那么对应的ajaxdownloadfileAction方法的路由路径就是/download/ajaxdownloadfile,所以表单的action要写成:
action="/download/ajaxdownloadfile"
3. 控制器中获取表单参数的正确方式
你用$this->_getParam('id')是没问题的,这个方法会自动从POST/GET里获取参数。如果想更明确指定从POST获取(因为你的表单是POST方法),可以用:
$id = $this->getRequest()->getPost('id'); $nomfic = $this->getRequest()->getPost('nomfic'); $statut = $this->getRequest()->getPost('statut');
修正后的完整代码
表单代码
<form name="downloadFile" id="downloadFile" method="POST" action="/download/ajaxdownloadfile"> <input type="hidden" name="id" value="<?php echo $elem['evt_id']?>" /> <input type="hidden" name="nomfic" value="<?php echo $elem['evt_nomfic']?>" /> <input type="hidden" name="statut" value="<?php echo $elem['evt_statut']?>" /> <img class='js-img-download' type="submit" src='/img/download.png'> </form>
控制器Action代码(优化版)
public function ajaxdownloadfileAction() { $this->_helper->layout->disableLayout(); $this->_helper->viewRenderer->setNoRender(); $this->view->lib = $this->_labelsFile; // 获取POST参数 $id = $this->getRequest()->getPost('id'); $nomfic = $this->getRequest()->getPost('nomfic'); $statut = $this->getRequest()->getPost('statut'); var_dump($id, $nomfic); echo $statut; $connection = ssh2_connect($this->_configFile->ftp->hostname, $this->_configFile->ftp->port); if ($connection) { $login = ssh2_auth_password($connection, $this->_configFile->ftp->login, $this->_configFile->ftp->password); if ($login) { // 这里你的$content逻辑可以根据实际需求完善 $content = true; if ($content) { // 后续处理逻辑... } } } }
额外提示
- 确保你的控制器文件名和类名符合Zend规范:比如
DownloadController.php对应类DownloadController,继承Zend_Controller_Action - 如果你的项目配置了自定义路由,要根据路由规则调整action路径,但默认路由就是上面说的
/控制器名/Action名
内容的提问来源于stack exchange,提问作者Nico Boulein
相关产品推荐
相关产品推荐

