3

私は CakePHP が初めてで、いくつかのチュートリアルに従って簡単なフォームを作成しました。この html フォームでは、検証を使用しました。問題は、検証は機能していますが、メッセージに表示したいものが表示されないことです。以下のコードを試しました。

モデル

 public $validate = array(
        'title' => array(
            'title_required' => array(
                'rule' => 'notEmpty',
                'message' => 'This is required field'
            ),
            'title_unique' => array(
                'rule' => 'isUnique',
                'message' => 'This should be unique title'
            )
        )
    );

コントローラ

public function add() {
        if ($this->request->data) {
            if ($this->Post->save($this->request->data)) {
                $this->Session->setFlash('Post has been added successfully');
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash('Error occured, Please try agan later!');
            }
        }
    }

意見

<h2>Add New Post</h2>
<?php
echo $this->Form->create('Post', array('action'=>'add'));
echo $this->Form->input('title');
echo $this->Form->input('body');
echo $this->Form->end('Create Post');
?>

私が見た検証エラーは、コントローラーで言及したメッセージではありません。

ここに画像の説明を入力

4

3 に答える 3

16

これは、組み込みのブラウザー検証です。

2.3 以降、検証ルールに基づいて、HTML5 の必須属性も入力に追加されます。

あなたtitleにはnotEmptyルールがあるので、Cakeは出力しています

<input type="text" required="required" ..

ブラウザがそのメッセージをトリガーしています。

編集:この動作をオーバーライドするには、次のようにします。

$this->Form->input('title', array('required'=>false));

また

$this->Form->submit('Submit', array('formnovalidate' => true));

フォームを送信すると、モデルの検証が開始されます。

于 2013-02-06T10:52:44.560 に答える
0

あなたのコードから私が見ることができるのは、あなたがヘルパーを含んでいないということです。

public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');

コントローラに追加して試してみてください。

于 2013-02-06T07:29:18.277 に答える
0

オプションForm-create()が無効です。最初の引数はモデル名、2番目はオプションです。

<h2>Add New Post</h2>
<?php
     echo $this->Form->create('Post', array('action'=>'add'));
     echo $this->Form->input('title');
     echo $this->Form->input('body');
     echo $this->Form->end('Create Post');
?>

フォームヘルパーがフォームを作成している「モデル」がわからない場合、適切な場所でフィールド検証をチェックしないため、「タイトル」の検証エラーは出力されません。

[更新]上記の解決策では問題は解決しませんでした。OPが質問を変更しました

いくつかのアイデア:

  1. 必ず「デバッグ」を有効にしてください(App / Config / core.phpが設定さConfigure::write('debug', 2);れています。そうでない場合、CakePHPはモデルの「キャッシュ」バージョンを使用している可能性があります。

  2. モデルに間違った名前を付けた場合、Cakeが自動的にモデルを生成する可能性があります。その場合、独自のモデルが実際に使用されることはありません。デバッグのためにこれを試して、モデルに「到達」するかどうかを確認してください。

これをモデルに追加します。

public function beforeValidate($options = array())
{
     debug($this->data); exit();
}
于 2013-02-06T07:30:31.427 に答える