0

Cakephp 3 でログイン システムを実行しようとしています。

クエリは次のとおりです。

 $user_details = $this->User->find('first', ['conditions'=>['email_id'=$email, 'password'=>$password]]);

 if(!empty($user_details)){

    $this->request->session()->write('user_email'=>$user_details['email_id']);
    $this->request->session->write('user_id'=>$user_details['id');

 }

クエリの書き方について、cakephp 2 と cakephp 3 の違いを教えていただけますか?

4

2 に答える 2

0

ユーザーを認証するには、Authentication コンポーネントを使用する必要があります。これは、すべてのデータをサーバーとリクエストに自動的にバインドするため、CakePHP 内での最適な実装として機能します。

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login',
            'plugin' => 'Users'
        ],
        'authError' => 'Did you really think you are allowed to see that?',
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'email']
            ]
        ],
        'storage' => 'Session'
    ]);
}

ドキュメントを参照してください: http://book.cakephp.org/3.0/en/controllers/components/authentication.html


元の質問に答えるには

Cake 2 は、配列構造を持つ automagical 関数を使用してクエリを作成しますが、これは非常に悪質です。クエリは呼び出し時に直接実行されます。

array( 'conditions' => array('Model.field' => $thisValue), //array of conditions 'recursive' => 1, //int //array of field names 'fields' => array('Model.field1', 'DISTINCT Model.field2'), //string or array defining order 'order' => array('Model.created', 'Model.field3 DESC'), 'group' => array('Model.field'), //fields to GROUP BY 'limit' => n, //int 'page' => n, //int 'offset' => n, //int 'callbacks' => true //other possible values are false, 'before', 'after' )

http://book.cakephp.org/2.0/en/models/retriving-your-data.html

Cake 3 内では、クエリはクエリ ビルダー オブジェクトを使用して構築されます。これにより、後続のすべての呼び出しで SQL が変更されます。呼び出した後にのみ実行されます。

$query = $articles->find('all') ->where(['Articles.created >' => new DateTime('-10 days')]) ->contain(['Comments', 'Authors']) ->limit(10);

ここで、オブジェクトは、すべての呼び出し ( wherecontainlimit) で参照された SQL で操作されます。

execute()、などを適用した後にクエリが実行されfirst()、データセットが配列として返され、その他がオブジェクトとして返されます。toArray()toArray()

さらに読む: http://book.cakephp.org/3.0/en/orm/retriving-data-and-resultsets.html

于 2016-02-05T09:32:33.550 に答える
0

このクエリを試してみてください...

$user_details = $this->User->find('first', ['conditions'=>['User.email_id'=$email, 'User.password'=>$password]]);

それ以外の場合は、 http://book.cakephp.org/3.0/en/controllers/components/authentication.htmlからヘルプが得られます

于 2016-02-04T12:55:19.920 に答える