在将post发送到请求的控制器函数之前,CakePHP表单验证

时间:2011-02-26 00:03:54

标签: php model-view-controller cakephp

我的验证工作正常,但我想在搜索控制器之前显示验证错误。我知道在CakePHP框架中可能无法做到这一点。

我有一个模型 plan.php 。在 plans_controller.php 中,我有一个名为 search()的函数。

我的表单按预期调用 search()(因为没有搜索模型):

echo $this->Form->create('Plan', array('action' => 'search'));

按照目前的情况,当我提交搜索时,会显示错误并且网址会更改为... /搜索,因此不会显示任何结果(“该搜索条件有0条结果”,但正确的验证错误显示在必填表格字段下方。

我不希望显示... /搜索网址。我希望表单“暂停”,只显示验证错误,而不是将URL更改为搜索功能。

我在一个元素中调用搜索表单,因为搜索表单显示在几个不同的页面上。

总结一下:搜索表单应验证w / out更改搜索控制器操作名称的url路径。当然,验证是在search()和plan.php模型中完成的,所以我只是不知道如何解决这个问题并想知道它是否可能。

2 个答案:

答案 0 :(得分:1)

您可以使用模型的validates()方法检查它是否有效,然后重定向。

假设您的模型名为Plan,这将是您的控制器

$errors = array();
if (!$this->Plan->validates($this->data)) {
   //errors occured
   $errors = $this->Plan->invalidFields();
   $this->Session->save('Plan.errors', $errors);
   $this->redirect('/plans');
}

在你看来。

if ($this->Session->check('Plan.errors')) {
   $errors = $this->Session->read('Plan.errors');
   $this->Session->delete('Plan.errors'); //don't want it again

}

在这两种情况下,请确保会话助手/组件实际分配给您的视图和控制器

答案 1 :(得分:0)

行。破解了一个内爆的工作解决方案,但现在我的错误只显示在默认布局中,不再出现在属于的表单字段下。所以现在我需要知道如何将错误返回到表单字段下面。

工作代码:

...else {
          $errors = $this->Plan->invalidFields();
          $error_messages = implode(' ',$errors);
          $this->Session->setFlash($error_messages);
          $this->redirect('/');
        }...