【问题标题】:Send POST from php Zend-Framework site从 php Zend-Framework 站点发送 POST
【发布时间】:2010-11-01 21:40:01
【问题描述】:

我目前正在使用 ACL 开发一个 zend 框架站点。

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

用户提交登录表单,然后我检查是否有可以将其发送到的位置,这里再次没有问题,这是可行的。

但是,我希望能够提交原始表单数据,现在它们已被授权 - 唯一的问题是,如果我将它们重定向到页面,调用:

$this->getRequest()->isPost()

失败,因为它不是发布请求。

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

显然我可以从使用 $this->getRequest()->isPost() 进行更改,但由于需要更改的金额很大,我希望不必这样做。

【问题讨论】:

  • 这是非常相似但同时又不同的东西 - 我目前基本上使用了该解决方案,但如前所述,我最终向用户显示了 POST 的结果,但在错误的 URL ,这并不重要,但我希望 URL 正确。
  • @Scobler 检查 Netbeans 7.0。它有很好的重构选项。您只需点击几下即可更改所有出现的次数。
  • 你不能使用 forward('action', array($post)); ?
  • @ArneRie 否。用户将首先输入登录信息,因此当前的 post 请求不能只转发,因为它会为登录创建一个新的 post 请求。然后,如果您使用参数转发,除非您使用 cURL 之类的东西,否则它将不是一个发布请求。但这是在服务器端,而不是客户端,因此结果显示在发出请求的 url 上,而不是真实的。这是个好问题!

标签: php zend-framework post


【解决方案1】:

通常完成的方式(在许多网站上都可以看到)是将表单数据和请求的操作存储在会话中,然后将用户重定向到登录页面。当登录被授权时,您读取会话以获取任何待处理的操作,重新加载表单并使用会话中的数据填充它(之后从会话中正确清除任何待处理的操作)。用户只需再次点击提交即可。

另一种方法是使用 HttpClient 并将数据作为 POST 提交。

【讨论】:

  • 感谢您的想法,但这里会有两个问题 - 我捕获用户正在前往的操作和控制器,仅当他们的授权已过期(这可能是超时)所以要知道他们来自哪里并返回他们对用户来说会更耗时。我希望它在用户获得授权后立即继续用户正在做的事情。您是否有更多关于使用 HttpClient 的详细信息 - 我按照文档所述进行了尝试,但似乎并没有按照我的意愿工作。
  • 您可以在此处找到 Zend_Http_Client 文档:framework.zend.com/manual/1.11/en/…。或者,您可以将 fopen() 与 stream_context_create() 一起使用,如下例所示:php.net/manual/en/function.stream-context-create.php#72017
  • 我现在已经尝试了这两种方法,似乎它们都在做非常相似的事情来转发请求 - 他们正在提交数据并获取结果,然后在当前页面中显示它们- 这仍然给我留下了错误的 URL。
  • @Scobler 如果您再次将用户发送到表单并填充之前存储在会话中的数据,然后将其标记为通过 javascript 重新提交?
  • @Keyne 这将是一种选择,但我可以看到一个小问题,如果用户关闭了 javascript,它将无法工作。好的,他们只需要再次按下提交,这比表单数据“丢失”要好得多。但我真的会想到有一种方法可以启动人工 POST。
猜你喜欢
  • 2012-01-04
  • 2011-06-05
  • 2011-01-17
  • 2020-05-11
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2017-03-07
  • 1970-01-01
相关资源
最近更新 更多