3

データを送信するとページがリロードされるだけで、CakePHPからエラーやメッセージが表示されることはありません。コードは、ブログチュートリアルと同じ/類似の構造に従います。

ビューコード

        <?php
        echo $this->Form->create('Sm');
        echo $this->Form->input('recievers', array('rows' => '1'));
        echo $this->Form->input('subject');
        echo $this->Form->input('message');
        echo $this->Form->end('SEND');
        ?>

コントローラコード

    public function send() {
    if ($this->request->is('sm')) {
        $this->Sm->create();
        if ($this->Sm->save($this->request->data)) {
            $this->Session->setFlash('Sms has been added to the database');
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash('Unable to send sms.');
        }
    }
}

モデルコード

class Sm extends AppModel {
public $validate = array(
    'subject' => array(
        'rule' => 'notEmpty'
    ),
    'message' => array(
        'rule' => 'notEmpty'
    ),
    'recievers' => array(
        'rule' => 'notEmpty'
    )
); }

エクスポートされたSQL

    CREATE TABLE IF NOT EXISTS `sms` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `subject` varchar(150) DEFAULT NULL,
  `message` text,
  `sender` varchar(50) DEFAULT NULL,
  `recievers` text,
  `sent` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
4

3 に答える 3

4

間違ったリクエスト'メソッド'を指定しました。

if ($this->request->is('sm')) {

する必要があります:

if ($this->request->is('post')) {

'post'モデルを使用するCakePHPの例で混乱したのではないかと思います。ただし、この行は、ページへのアクセスに使用される要求のタイプ(、、、など)を確認するためのものですpostgetput

正しいリクエストメソッドをチェックすることにより、CakePHPはフォームが送信/送信された場合にのみデータを挿入/更新します。それ以外の場合、データベースを更新せずにフォームが表示されます。

于 2013-03-04T14:07:47.723 に答える
0

nameモデル内でプロパティを定義するのを忘れています。

var $name = 'Sm';
于 2013-03-04T12:15:45.907 に答える
0

ほんの数分前、私は同じタイプの問題に直面していました。私の問題はもっと奇妙でした。私のコントローラーでは、次のようなものを使用しました。

if( $this->MyModel->save( $this->request->data ) ) {
    //positive. proceed.....
}
else {
    //negative. show error
    pr( $this->MyModel->validationErrors );
}

ご覧のとおり、私はネガティブなケースを処理しましたが、それでも何も見えませんでした。私のモデルでも、beforeSaveとafterSaveを使用してチェックしました。beforeSaveモデルでは、完全にフォーマットされた配列を保存する準備ができていることがわかりましたが、afterSaveがトリガーされなかったため、データが保存されませんでした。したがって、コントローラーからエラーが表示されるはずです。まだ解決策はありません。

これが私が問題を理解した方法です。データが保存されるテーブルを確認しました。テーブルには、NOTNULL属性を持つ列がたくさんありました。保存していたデータには、NULL値のフィールドがいくつかありました。したがって、理論的には、理由としてコントローラーにvalidationErrorsが表示されるはずですが、残念ながら表示されませんでした。これらのフィールドをnull許容に設定すると、問題が解決しました。したがって、どのフィールドがNULL値を持つ可能性があるかを確認し、それらをnull可能に設定し、NOTNULLフィールドにいくつかの値があることを確認することをお勧めします。

お役に立てれば。乾杯!!!

于 2015-01-27T10:10:40.653 に答える