在PHP状态之间传递数据

时间:2010-05-03 13:55:41

标签: php rest

所以我使用的是Limonade PHP,它有一个RESTful设计,可以模拟创建,更新,删除的PUT,POST,DELETE路径。

我正在尝试开发一些表现良好的表单验证。我面临的主要问题是如何将我过滤的数据(验证失败)返回到重新填充创建或编辑表单。

如何做到这一点?我目前要创建一个页面:

/admin/page/new -> GET function

/admin/page -> POST function
+ validate
    + pass, update db
    + fail, add errors to flash, redirect to /admin/page/mew

由于我不知道如何使用无效但已过滤的数据填充/ admin / page / new,这一切都会失败。

3 个答案:

答案 0 :(得分:1)

您是否使用会话将数据传输到/ admin / page / new? http://www.php.net/manual/en/session.examples.basic.php

编辑: 我刚刚发现这篇文章:http://www.recessframework.org/page/towards-restful-php-5-basic-tips建议在$ _SESSION上使用cookie。它没有详细说明原因,但任何一个都能达到你想要的结果。

答案 1 :(得分:1)

要将数据恢复到重定向页面,您需要使用会话或对请求进行垃圾处理,并为每个元素获取vars(不好看,对于书签不好,不会建议)。

我猜是'向flash添加错误'是使用会话变量(不熟悉Limonade)。

另一种选择是使用AJAX调用提交表单,然后表单数据甚至不会因错误而改变。

当然,您仍然需要一种非AJAX方法来实现向后兼容性。

更新Limonade Source确认flash()使用$_SESSION。所以你已经在使用会话变量了。

答案 2 :(得分:0)

您可以输出表单而不重定向。将表单放在不包含其他HTML元素的脚本中。让它设置$_POST中给出的任何表单输入的值(在使用适当的引用样式调用htmlspecialchars之后)。在适当的情况下将表单脚本包含在其他脚本中。

在您的实用程序功能中:

function passthruFormInput($name) {
    if (isset($_POST[$name])) {
      echo htmlspecialchars($_POST[$name], ENT_QUOTES); 
    }
}

newForm.php(或任何你想要的名字):

<form action="..." method="POST" onsubmit="...(client side validation function)...">
    ...
    <input name="foo" value="<?php passthruFormInput('foo'); ?>"/>
    ...
</form>

如果您动态生成表单,请调整以上内容以匹配。关于这种实现和方法的一些事情让人感到厌倦,但我无法完全理解它。

保持表单脚本可公开访问可能不是安全问题,但它应该位于文档根层次结构之外,或者位于受ORDER Allow,Denymod_rewrite保护的分支中。它应该与观点一致。