我的验证工作正常,但我想在搜索控制器之前显示验证错误。我知道在CakePHP框架中可能无法做到这一点。
我有一个模型 plan.php 。在 plans_controller.php 中,我有一个名为 search()的函数。
我的表单按预期调用 search()(因为没有搜索模型):
echo $this->Form->create('Plan', array('action' => 'search'));
按照目前的情况,当我提交搜索时,会显示错误并且网址会更改为... /搜索,因此不会显示任何结果(“该搜索条件有0条结果”,但正确的验证错误显示在必填表格字段下方。
我不希望显示... /搜索网址。我希望表单“暂停”,只显示验证错误,而不是将URL更改为搜索功能。
我在一个元素中调用搜索表单,因为搜索表单显示在几个不同的页面上。
总结一下:搜索表单应验证w / out更改搜索控制器操作名称的url路径。当然,验证是在search()和plan.php模型中完成的,所以我只是不知道如何解决这个问题并想知道它是否可能。
答案 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('/');
}...