CakePHP:当表单未验证时,表单中的数据如何仍然存在?

时间:2011-03-03 20:42:26

标签: forms cakephp cakephp-1.3 default-value

使用CakePHP创建表单元素时如下:

echo $this->Form->input('User.first_name');

您从一个空白字段开始。当您输入名称 John 并提交表单时,如果表单未验证,则返回时名称 John 仍然存在到页面来修复您的验证错误。这很方便,因为您可以修复错误,而无需重新键入正确的部分。

如何将其作为值放回?

我需要知道这一点,因为一旦表单成功提交并且您离开页面并返回,表单将再次为空白。

我将名称保存为会话,所以我可以这样做:

$first_name = $this->Session->read('Cart.User.first_name');
echo $this->Form->input('User.first_name',array('value'=>$first_name));

现在,如果您浏览页面并返回,该名称仍将存在,但会破坏原始逻辑,防止在表单无法验证时将其重新输入。


让我举个例子。

我正在创建我的名字元素:

$first_name = $this->Session->read('Cart.User.first_name');
echo $this->Form->input('User.first_name',array('value'=>$first_name));

我正确填写表格并进入最终结帐页面。我看到我拼错了我的名字 Jhon 。所以我点击了编辑按钮并返回到表单,因为我在表单中手动设置value我的数据仍然存在。我正确地将我的姓名重新输入为 John 并提交表单。由于某些其他原因,表单未验证,我将重新收回表单,但不会像原来那样显示 John ,而是显示 Jhon 再次,因为当我手动设置value时,我会使用会话中的任何内容覆盖默认值。

因此,如果我知道CakePHP在未验证时如何将数据放回到表单中,我可以以相同的方式恢复会话数据,而不会覆盖默认值。

1 个答案:

答案 0 :(得分:2)

数据在POST数据调用中传回表单。 FormHelper自动魔术元素使用该数据填充字段的值属性。如果您离开页面,则不会传递帖子信息。

您需要将$ this-data块保存在会话值中,以便在页面之间移动时保留它。