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

長い間 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 に答える
0

リダイレクトによって検証エラーが表示されなくなりませんか? エラーが発生した場合でも、ユーザーを新しいページ (ビュー ページ) にリダイレクトしているため、検証エラー メッセージは表示されません。

この行をコメントアウトしようとしています:

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

または、$isSuccess が true であることを条件にします。

UPDATE Re: あなたのコメント - 問題は、フォームをオンにしてページからリダイレクトすると、(簡単に) 検証エラー メッセージを表示できないことです。最も簡単な方法は、フォームを独自のアクションに送信することです。その音によって、別のコントローラーのアクションに送信しています。

于 2013-04-04T19:17:03.170 に答える
0

フォームを処理する必要があると思います->ニュースコントローラーのビューアクションに保存します。その後、他の人が言ったように、検証に失敗した場合はページからリダイレクトしないでください。

リダイレクトすると、少なくとも 1 回 (セッション Flash から) 検証メッセージが表示されますが、入力されたフォーム データは失われます。

最も簡単な解決策は、保存を News->view メソッドに移動することです。ニュース モデルとコメント モデルが関連付けられている場合は、利用可能なトラバーサルを使用してそこにコメントを保存します。

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