如何在cakePHP中返回表单验证

时间:2013-04-04 17:01:40

标签: php validation cakephp web

我需要返回表单验证,因为我在提交

后丢失了它

我在新闻/观看/ 30 ---查看报告详情---- 在该页面中,我们添加了评论表单:

        <h2>Add comment</h2>
        <?php
        echo $this->Form->create("Comment", array(
                    'url' => array('controller' => 'Comments', 'action' => 'add')
                ));
        echo $this->Form->label("name");
        echo $this->Form->input("name", array("label" => false, "class" => "textfield"));
        echo $this->Form->label("email");
        echo $this->Form->input("email", array("label" => false, "class" => "textfield"));
        echo $this->Form->label("text");
        echo $this->Form->textarea("text", array("label" => false));
        echo $this->Form->input("object_id", array("type" => "hidden", "value" => $data['News']['id']));
        echo $this->Form->input("type", array("type" => "hidden", "value" => "news"));
        echo $this->Html->Link("Add Comment", "#", array("class" => "add_button", "onclick" => "$('#CommentViewForm').submit()"));
        echo $this->Form->end();
        ?> 

表单在评论控制器上提交:

在评论/添加中:

        $isSuccess = $this->Comment->save($this->request->data);
        if ($isSuccess) {
            $this->Session->setFlash('your Comments has been added successfully and pending admin aproval.thanks ', 'default', array(), 'good');
        } else {
            $this->Session->setFlash('Failed to add your comment: <br/>Fill all the required fileds <br/>type correct Email', 'default', array(), 'bad');
        }
         $this->redirect(array("controller" => "News", "action" => "view", $id));

我对名称,电子邮件和评论本身做了一些验证规则 当用户输入有错误时返回添加注释表但没有像往常一样显示错误

我希望你能理解我,我等你的帮助 非常感谢

4 个答案:

答案 0 :(得分:0)

尝试将'error'=>true添加到每个输入表单助手中 比如echo $this->Form->input("name", array("label" => false, "class" => "textfield", 'error'=>true));

看看是否有效。

答案 1 :(得分:0)

如果您没有长时间使用CakePHP,那么您应该首先烘焙一些代码。 然后,您将了解到如果表单未验证您不应重定向:

if ($this->Comment->save($this->request->data)) {
    $this->Session->setFlash('your Comments has been added successfully and pending admin aproval.thanks ', 'default', array(), 'good');
    $this->redirect(array("controller" => "News", "action" => "view", $id));
} else {
    $this->Session->setFlash('Failed to add your comment: <br/>Fill all the required fileds <br/>type correct Email', 'default', array(), 'bad');
    // DO NOT redirect
}

烘焙模板将以这种方式烘焙您的控制器代码。这证明了一种处理表格的清晰透明的方式。

答案 2 :(得分:0)

您的重定向不会阻止您看到验证错误吗?即使有错误,您也会将用户重定向到新页面(视图页面),因此他们永远不会看到任何验证错误消息。

尝试评论这一行:

//$this->redirect(array("controller" => "News", "action" => "view", $id));

或以$ isSuccess为真为条件。

<强>更新 Re:您的评论 - 问题是,如果您重定向远离打开表单的页面,您将无法(轻松)显示验证错误消息。最简单的方法是让你的表单提交给自己的行动 - 听到它你将它提交给另一个控制器的动作。

答案 3 :(得分:0)

我认为您需要在新闻控制器上的视图操作中处理表单&gt;保存,然后正如其他人所说的那样,如果验证失败,请不要从页面重定向。

如果您重定向,您至少仍会看到验证消息一次(来自会话Flash),但您将丢失填写的表单数据。

最简单的解决方案是将保存移至您的新闻 - &gt;视图方法,如果您的新闻和评论模型相关联,只需使用可用的遍历来保存评论:

$isSuccess = $this->News->Comment->save($this->request->data);