2

私は Cake が初めてで、それを学ぶためにアプリケーションを構築しています。ユーザー登録システムに問題があります。これまでのところ、これは私のUsersコントローラーの登録コードです:

public function register() {
    $this->set('title_for_layout', 'Register');
    if ($this->request->is('post')) {
        $this->User->create();
        if ($this->User->save($this->request->data)) {
            $this->Session->setFlash('The user has been saved');
            $this->redirect(array('action' => 'register'));
        } else {
            $this->Session->setFlash('The user could not be saved. Please, try again.');
        }
    }
}

そして、私のUserモデル内には、パスワードをハッシュする次のメソッドがあります。

public function beforeSave() {
    if (isset($this->data[$this->alias]['password'])) {
        $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
    }
    return true;
}

usersこれは機能します。ユーザーは、ユーザー名、電子メール、およびハッシュ化されたパスワードとともに、データベースのテーブルに追加されます。ただし、ユーザー名と電子メールが一意であることを確認するためのチェックは行われません。

私の限られた理解から、モデルにいくつかの検証ルールを追加Userして、ユーザー名と電子メールのフィールドがテーブルに入力される前に一意であることを確認する必要がありますか? 現時点では、次の検証ルールしかありません。

public $validate = array(
    'username' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'A username is required'
        )
    ),
    'email' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'An email is required'
        )
    ),
    'password' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'A password is required'
        )
    )
);

また、私の登録フォームには というPassword (confirm)フィールドがありますpasswordConf。ユーザーテーブルに入力する前に、ユーザーがパスワードを正しく入力したかどうかを確認したいのですが、その方法がわかりません。私の登録方法のどこかで、2 つのパスワードが同じかどうかを確認する必要があると思います。

助けてくれてありがとう。

4

2 に答える 2

5

isUnique ルールは、ユーザー名と電子メール フィールドで機能します。フィールドごとに複数のルールを使用する方法を示すコードのサンプルを次に示します。

public $validate = array(
    'username' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'You must enter a username.'
        ),
        'length' => array(
            'rule' => array('between', 3, 15),
            'message' => 'Your username must be between 3 and 15 characters long.'
        ),
        'unique' => array(
            'rule'    => 'isUnique',
            'message' => 'This username has already been taken.'
        )
    ),
    'password' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'You must enter a password.'
        ),
        'length' => array(
            'rule' => array('minLength', '6'),
            'message' => 'Your password must be at least 6 characters long.'
        )
    ),
        'email' => array(
            'email' => array(
            'rule'    => array('email'),
            'message' => 'Please enter a valid email address.'
        )
    )
);

パスワードの比較については、 beforeSave コールバックを編集してパスワードを相互にチェックし、一致する場合は true を返し、一致しない場合は false を返します。このようなもの:

public function beforeSave() {
    if (isset($this->data[$this->alias]['password'])) {
        if($this->data[$this->alias]['password'] === $this->data[$this->alias]['passwordConf']) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
            return true;
        } else {
            return false;
        }
    }
    return true;
}
于 2012-07-09T21:03:44.090 に答える
3

CakePHPには、実際には、と呼ばれる検証ルールがisUniqueあり、これを使用してユーザー名と電子メールをチェックできます。組み込みルールのリストはここにあります。これとデータ検証チュートリアルを使用して、ユーザー名と電子メールを確認できます。パスワードが同じであるかどうかの確認に関しては、EqualToリクエストごとにその場で検証ルールを作成できることを前提として、ルールリストに示されているルールを使用できる場合があります。

于 2012-07-09T17:52:07.820 に答える