1

CakePhp は初めてで、CakePhp 2.x を使用しています。私はおそらく、以下の問題を間違った方法で解決しようとしています。そして、私は本当に単純なことを見落としていることを知っていますが、.....

「5 ~ 15 文字の間」に基づいてログインの詳細を検証していますが、期待どおりにエラーが返されます。

[The MODEL]

public $validate = array(
   'username' => array(            
        'between' => array(
            'rule'    => array('between', 5, 15),
            'message' => 'Between 5 to 15 characters'
        )
    ),
    'password' => array(
        'rule'    => array('minLength', '8'),
        'message' => 'Minimum 8 characters long'
    )

);



[The CONTROLLER]

public function login() {

            if ($this->request->data) {

                $this->User->set($this->request->data);

                if ($this->User->validates() && $this->Auth->login()) {

                    if ($user = $this->Auth->user()) {                       

                         $this->render($this->Auth->redirect());

                    }else{
                        //??
                    }
                }else{
                        $this->User->create();

                    pr($this->User->invalidFields());

                        $errors = $this->User->validationErrors;

                        $data = compact('errors');

                        $this->set('errors', $data);
                        $this->set('_serialize', array('errors'));

                        $this->Session->setFlash('Your username/password combination was incorrect');                                    
                }
            }


    }

したがって、問題は、ログインの詳細 (ユーザー) が存在しない場合でも、フィールドが上記のモデルのルールに従っている場合、エラーは返されない (ダメ) ことです。これに別の検証を追加して、そのユーザーが実際に存在するかどうかを確認する別のルールを追加するのは正しいでしょうか? ならどうやって!?

または、これをコントローラーのログイン機能に組み込み、ユーザーが存在するかどうかを確認しますか? 私は今少し混乱しています。画面を見ている時間が長かったのかもしれません。

ありがとう。

4

2 に答える 2

1

フィールドごとに複数のルールを指定できます...

詳細については、このリンクをたどってください...

http://book.cakephp.org/2.0/en/models/data-validation.html#multiple-rules-per-field

サンプルコードを以下に示します

<?php

[IN The MODEL]

//the following code checks if the username is notempty, is a valid email and is it already taken or not...
public $validate = array(

    'username' => array(

        'notempty' => array(
            'rule' => array('notempty'),
            'message' => 'Please enter a valid email.',
        ),

        'email' => array(
            'rule' => array('email'),
            'message' => 'Please enter a valid email.',
        ),

        'isUnique' => array(
            'rule' => 'isUnique',
            'message' => 'This username has already been taken.'
        )
    )
);
?>
于 2013-07-24T06:12:47.680 に答える
1

これに別の検証を追加して、そのユーザーが実際に存在するかどうかを確認する別のルールを追加するのは正しいでしょうか? ならどうやって!?

ルールはいくつでも追加できます。この場合、「一意」のルールが必要です。データ検証に関する本のこのセクションを読んでください

または、これをコントローラーのログイン機能に組み込み、ユーザーが存在するかどうかを確認しますか?

すべてのデータ操作と検証は、MVC スタックのモデルレイヤーで行う必要があります。したがって、すべてをモデルメソッドに入れ、投稿データをそれに渡し、そこで検証します。すべてのロジックをコントローラーに入れることができますが、MVC パターンに従わないという点では愚かです。モデルは、シェルとコントローラーの間で共有できます。たとえば、コントローラーは共有できません。ここでも、シェルでコントローラーをインスタンス化できますが、これをすべて実行すると、MVC パターンが持つ利点とアイデアが無効になります。また、モデルは競争力のあるテストが容易です。はい、コードを単体テストする必要があります。たとえば、ユーザープラグインがどのようにそれを行っているかを確認してください。

于 2013-07-21T12:57:00.317 に答える