それで、誰かが私にこれを説明できますか?編集アクションを作成しようとしていますが、以下が機能しない理由が少しわかりません:
public function edit($id = null) {
if (!$id) {
throw new NotFoundException('NO ID HAS BEEN SUPPLIED');
}
$data = $this->User->findById($id);
if(!$this->request->is('post')) { $this->request->data = $data; }
if($this->request->is('post') || $this->request->is('put')) {
$this->User->id = $id;
$this->User->save($this->request->data);
$this->redirect(array('action'=>'index'));
}
}
つまり、機能しないということは、findById($id) から収集されたデータをフォームに事前入力している間、フォームが送信された後に新しい入力でデータベースを更新しないということです。
私はこれを置き換えました:
if(!$this->request->is('post'))
以下を使用します。
if($this->request->is('get'))
そして突然、それはうまくいきます。投稿から収集された新しい値で行を更新します。しかし、ここで何が起こっているのかわかりません。$this->request->is('get') は機能するのに、!$this->request->is('post) は機能しないのはなぜですか? 確かに、アクションが最初に呼び出されるときは、GET 要求を使用して呼び出されますか? そのリクエストは !$this->request->is('post') に該当しませんか?
編集:
以下は ctp です: app/View/Users/edit.ctp
<?php echo $this->Form->create('User'); ?>
<fieldset>
<legend><?php echo __('edit User'); ?></legend>
<?php
echo $this->Form->input('username');
echo $this->Form->input('password');
echo $this->Form->input('role');
// echo $this->Form->input('role', array(
// 'options' => array('admin' => 'Admin', 'regular' => 'Regular')
//));//
?>
</fieldset> <?php echo $this->Form->end(__('Submit')); ?>