在CakePHP中表单验证失败后如何保留参数?

时间:2009-06-15 05:28:02

标签: php cakephp parameters

我正在创建一个跟踪各种组织签名的应用程序。我有一个简单的表单,我可以传递ID,因此它会自动选择正确的组织。 add的URL如下所示:

/signatures/add/3

表格效果很好。通过传递3或任何其他ID,它会自动选择正确的字段,因为在我的视图中我做了:

echo $form->input('organization_id', array('selected' => $this->passedArgs));

当用户忘记填写表单元素时,我遇到了我的问题。表单将用户返回到:

/signatures/add/

因此没有选择正确的组织。它将恢复为默认值1.关于如何保留参数的任何提示?

3 个答案:

答案 0 :(得分:1)

我对蛋糕了解不多,但看起来形式的动作是/ signatures / add /

如果您将ID添加到表单操作,以便在视图中显示action =“signatures / add / {ID}”,那么它应该返回到该组织页面

答案 1 :(得分:0)

谢谢盖伦。你实际上指出了我正确的方向。我意识到我的表单想要保存组织的状态,但是当我这样做时我覆盖了它:

echo $form->input('organization_id', array('selected' => $this->passedArgs));

所以我现在所做的是:

if (!empty($this->passedArgs)) {
            echo $form->input('organization_id', array('selected' => $this->passedArgs));
        } else {
            echo $form->input('organization_id');
        }

它可以解决问题。

答案 2 :(得分:0)

将organization_id设置为所选值的正确方法是将其包含在控制器的数据数组中。例如

function add($organization_id)
  if(!empty($this->data)) {
    if($this->Signature->save($this->data)) {
      $this->setFlash('Save successful')
      $this->redirect(array('action' => 'index'))
    } else {
      $this->setFlash('Please review the form for errors')
    }
  }

  if($organization_id) {
    $this->data['Signature']['organization_id'] = $organization_id;
  }
}

然后在你看来简单地把

echo $form->create('Signature', array('action' => 'add'))
echo $form->input('organization_id')

它会自动从控制器数据中插入organization_id值。