0

我需要返回表单验证,因为我在提交后丢失了它

我在 News/view/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

4 回答 4

0

我认为您需要在 News 控制器的视图操作中处理 form->save ,然后正如其他人所说,如果验证失败,请不要从页面重定向。

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

最简单的解决方案是将保存移动到您的 News->view 方法,如果您的 News 和 Comment 模型相关联,只需使用可用的遍历将 Comment 保存在那里:

$isSuccess = $this->News->Comment->save($this->request->data);
于 2013-04-06T03:40:43.407 回答
0

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

尝试注释掉这一行:

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

或以 $isSuccess 为真为条件。

更新 回复:您的评论 - 问题是,如果您在打开表单的情况下从页面重定向,您将无法(轻松)向您显示验证错误消息。最简单的事情是让您的表单提交给它自己的动作 - 通过它的声音,您将它提交给另一个控制器中的动作。

于 2013-04-04T19:17:03.170 回答
0

just try to add 'error'=>true to each input form helper like echo $this->Form->input("name", array("label" => false, "class" => "textfield", 'error'=>true));

See if this work .

于 2013-04-04T18:31:47.320 回答
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
}

烘焙模板将以这种方式烘焙您的控制器代码。这断言了一种处理表单的干净和透明的方式。

于 2013-04-04T19:16:11.520 回答