0

私はCakePHPを初めて使用し、現時点ではユーザーが自分の個人情報を編集できるようにしようとしています。

ただし、この機能は機能しているように見えますが(ユーザーが更新されたことがわかります)、実際にはユーザーの詳細は更新されません。

$ this-> request-> dataでデバッガーを使用しましたが、表示されるのは、ログインしているユーザーのユーザーIDだけです。

これが私の機能です

public function useredit() {
        $this->User->id = $this->Session->read('Auth.User.id');
        $this->request->data = $this->Session->read('Auth.User.id');
        if ($this->request->is('post') || $this->request->is('put')) {
            //debug($this->request->data);
            //exit;
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash(__('The user has been saved', true));
                $this->redirect(array('action' => 'index'));
            } else {
                $this->Session->setFlash(__('The User could not be saved. Please, try again.', true));
            }
        } else {
            $this->request->data = $this->User->read(null);
            isset($this->request->data['User']['password']);
        }
    }

これが私の見解です:

<?php
echo $this->Form->create('User', array('action' => 'useredit'));
echo $this->Form->input('id', array('type' => 'hidden'));
echo $this->Form->input('username', array('value' => $this->Session->read('Auth.User.username')));
//echo $this->Form->input('password');
echo $this->Form->input('name', array('value' => $this->Session->read('Auth.User.name')));
echo $this->Form->input('surname', array('value' => $this->Session->read('Auth.User.surname')));
echo $this->Form->input('address1', array('value' => $this->Session->read('Auth.User.address1')));
echo $this->Form->input('address2', array('value' => $this->Session->read('Auth.User.address2')));
echo $this->Form->input('town', array('value' => $this->Session->read('Auth.User.town')));
echo $this->Form->input('postCode', array('value' => $this->Session->read('Auth.User.postCode')));
echo $this->Form->input('dob', array ('value' => $this->Session->read('Auth.User.dob')
                                        , 'label' => 'Date of Birth'
                                        , 'dateFormat' => 'DMY'
                                        , 'empty' => array('DATE','MONTH','YEAR')
                                        , 'minYear' => date('Y') - 110
                                        , 'maxYear' => date('Y') - 0));
echo $this->Form->input('emailAddress', array('value' => $this->Session->read('Auth.User.emailAddress')));
echo $this->Form->input('phoneNumber', array('value' => $this->Session->read('Auth.User.phoneNumber')));
echo $this->Form->input('mobileNumber', array('value' => $this->Session->read('Auth.User.mobileNumber')));
echo $this->Form->end('Submit');
?>

ID以外のデータが保存されない理由を理解するのに役立つ情報をいただければ幸いです。

ありがとう

4

1 に答える 1

2
$this->request->data = $this->Session->read('Auth.User.id');

間違っている。また、フォームビューでデフォルトを設定しないでください。コントローラから渡されたデータに依存します。

あなたはおそらく意味します

$this->request->data = $this->Session->read('Auth');

しかし、それでも、セッションから「古いデータ」を読み取っています。find(first)を使用し'Auth.User.id'て、適切なレコードを照会するための唯一のものを提供します。このレコードを渡してから、としてビューに渡します$this->request->data。保存時に、IDが存在し、正しく更新されることを確認してください。

正しく行う方法については、http://www.dereuromark.de/2011/10/05/common-cakephp-problems-and-solutions/を参照してください。2.xの場合、$this->dataではなく$this->request->dataであることに注意してください。if ($this->request->is('post') || $this->request->is('put')) {}2.xにも使用できますが、基本的な考え方が明確になるはずです。

于 2013-02-14T11:53:13.497 に答える