0

CakePHP2 で作成したフォームにデータが投稿されていない場合は空白で表示されますが、セッション キー Person.id が存在する場合はモデルからのデータが入力されます。これが私のコードです:

function about() {
    // Make session key for debug purposes
    $this->Session->write("Person.id",1);
    if($this->request->is('post')) {
        debug("post");
    } else {
        debug("not post");
        // Use the value in the session Person.id to find the 
        // record in the Person model
        $this->params->data = $this->Person->findById($this->Session->read("Person.id"));
    }
}

上記のほとんどの作品。データを投稿せずにビューにアクセスすると、フォームにはPersonモデルからのデータが期待どおりに入力されます。

ただし、フォームを投稿すると、not post期待していたときにまだデバッグ メッセージが表示されますpost

データを割り当てる行をコメントアウトしてから$this->params->dataフォームを送信すると、正しいデバッグメッセージが表示されますがpost、なぜこれが起こっているのかわかりません。

移入されたことが Cake にとってフォーム投稿と同じことを意味する場合$this->params->data、真の本物のフォーム投稿を確認するにはどうすればよいでしょうか?

更新:変更if($this->request->is('post'))するとif($this->request->data)、希望どおりに機能します....しかし、理由はまだわかりません。

4

1 に答える 1

1

CakePHP2 では、FormHelper を使用してビューでフォームを作成すると、このフィールドが自動的に生成されます

<input type="hidden" name="_method" value="PUT"/>

レコードを編集するとき (主キーが設定されていることを意味します)。

フォームを送信すると、この隠しフィールドが HTTP メソッドをオーバーライドし、リクエストは POST ではなく PUT として表示されます。次のようにテストを更新できます。

if($this->request->is('put')) {
  ...
}

または、使用時に取得したコードを反映するためbake

if($this->request->is('post') || $this->request->is('put')) {
  ...
}

自分で確認したい場合は、リクエストをデバッグしてください:

debug($this->request);

少し話題から外れますが、セッションのキー「Person.id」がログインしているユーザーである場合、おそらくカスタムメカニズムを使用してユーザーをログイン/ログアウトし、おそらくAuthComponentを調べる価値があります。

于 2012-06-26T07:15:06.803 に答える