Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从php Zend Framework站点发送帖子_Php_Zend Framework_Post - Fatal编程技术网

从php Zend Framework站点发送帖子

从php Zend Framework站点发送帖子,php,zend-framework,post,Php,Zend Framework,Post,我目前正在使用ACL在zend framework站点上工作 ACL工作并使用DB存储权限。到目前为止,我所做的是,在一个preDispatch中,我捕获了用户想要去的地方,如果他们需要登录到那里,页面会显示登录表单。我还捕获了用户是否提交了表单并存储了数据(位置和表单数据)。到目前为止没有问题 用户提交登录表单,然后我检查是否有一个位置可以发送它们,这里同样没有问题,这是有效的 但是,我希望能够在原始表单数据经过验证后提交它们-唯一的问题是,如果我将它们重定向到页面,调用: $this->

我目前正在使用ACL在zend framework站点上工作

ACL工作并使用DB存储权限。到目前为止,我所做的是,在一个preDispatch中,我捕获了用户想要去的地方,如果他们需要登录到那里,页面会显示登录表单。我还捕获了用户是否提交了表单并存储了数据(位置和表单数据)。到目前为止没有问题

用户提交登录表单,然后我检查是否有一个位置可以发送它们,这里同样没有问题,这是有效的

但是,我希望能够在原始表单数据经过验证后提交它们-唯一的问题是,如果我将它们重定向到页面,调用:

$this->getRequest()->isPost()
失败,因为它不是post请求

我可以在成功登录时将用户转发到页面,在preDispatch中,将$u POST设置为原始捕获的数据,这与原始帖子仍然有效一样,但我认为这不是正确的方法-特别是URL-显然显示的页面是正确的,表单已正确提交,但是URL是登录过程的一部分

显然,我可以改变使用
$this->getRequest()->isPost()
,但由于有大量内容需要更改,我希望不必这样做。

通常的做法(在许多网站上都可以看到),就是在会话中存储表单数据和请求的操作,然后将用户重定向到登录页面。授权登录后,您将读取会话中的任何挂起操作,重新加载表单,并使用会话中的数据填充表单(随后正确清除会话中的任何挂起操作)。用户只需再次单击“提交”


另一种方法是使用HttpClient并以POST的形式提交数据。

可能的重复内容非常相似,但同时又有所不同-我目前基本上使用了该解决方案,但如上所述,我最终向用户显示了POST的结果,但URL错误,这并不重要,但我希望URL是正确的。@Scoobler检查Netbeans 7.0。它有很好的重构选项。点击几下就可以改变所有的眼动。你不能用forward('action',array($post))@ArneRie否。用户将首先键入登录名,因此当前post请求不能仅转发,因为它将为登录名创建新的post请求。然后,如果您使用params进行转发,那么它将不会是post请求,除非您使用类似cURL的东西。但这是在服务器端,而不是客户端,因此结果显示在发出请求的url上,而不是真实的url上。这是一个好问题!谢谢你的想法,但这里会有两个问题-我认为只有当用户的身份验证过期(可能是超时)时,用户才可以访问操作和控制器,因此,要知道它们来自何处并返回它们对用户来说会更耗时。我更希望它在用户被授权后继续用户正在做的事情。您有关于使用HttpClient的更多详细信息吗?我按照文档中的说明进行了尝试,但似乎没有按照我的要求工作。您可以在此处找到Zend_Http_客户端文档:。或者,您可以将fopen()与stream_context_create()一起使用,就像在这里的示例中一样:我现在已经尝试了这两种方法,它们似乎都在做一件与zend转发请求非常相似的事情-它们正在提交数据并获得结果,然后在当前页面中显示它们-这仍然会给我留下错误的URL。@Scoobler如果您再次将用户发送到表单并填充之前存储在会话中的数据,然后将其标记为通过javascript重新提交,该怎么办?@Keyne这是一个选项,但我可以看到一个小问题,如果用户关闭了javascript,它将无法工作。好的,他们只需再次按submit,这比表单数据“丢失”要好得多。但我真的认为有一种方法可以开始一篇人工帖子。