0

Cakephp の初心者で、別の MySQL テーブル名 "registration" でログインしたいと考えています。Cakephpの本によると、ログインと登録、およびそのユーザーコントローラーとモデルには、テーブルという名前のユーザーが必要です。しかし、私の質問はです。登録テーブルでログインする方法はありますか? ここで、そのすべてのページを定義します。

Controller AppController.php OnlineController.php(このページは私のサイトのメインコントローラーです。)

モデル AppModel.php Registrations.php

register.ctpを見る login.ctp

そしてここに私のログインビューページ

<?php echo  $this->Form->create('Registrations'); ?>
<table width="450" border="0" align="center" id="login_form">
  <tr align="center">
    <td colspan="2" align="left"><h3 style="padding-top:10px; padding-left:0px;">Login In</h3>
    <hr /></td>
    </tr>
    <tr><td><?php  echo $this->Session->flash(); ?></td></tr>
  <tr>
    <td width="245"><?php echo $this->Form->input('email'); ?></td>

  <tr>
    <td><?php echo $this->Form->input('password', array('type'=>'password')); ?></td>

  </tr>
  <tr>
    <td align="right"><a href="#">Lost Username/Password</a></td>

  </tr>
  <tr>
    <td align="right"><? echo $this->Form->end('Submit'); ?></td>

  </tr>
  <tr>
    <td align="right">&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
</table>

コントローラ >> OnlineController.php >> コードはこちら

クラス OnlineController は AppController を拡張します {

/**
 * Controller name
 *
 * @var string
 */
    public $name = 'Online';
    //component
    public $components=array('Session','Paginator','Auth');


    public $uses = array('Registrations','Contacts','User','RegistrationsModel');

function beforeFilter(){
   parent::beforeFilter();
}

    public function index(){
        //$students=$this->Student->find('all');


    }

public function login(){
if($this->request->is('post'))
    {

// pr($_POST);

 if ($this->Auth->login()) {

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


            // Prior to 2.3 use `return $this->redirect($this->Auth->redirect());`
        } 

        else {

            $this->Session->setFlash(__('Username or password is incorrect'));
        }


    }
      }

    public function logout() {
$this->redirect($this->Auth->logout());
}
    public function profile()
    {

    }

モデル部分>> Registrations.php とコードは

class Registrations extends AppModel {


 public  $name='Registrations';


function beforeSave() {
  if(isset($this->data['Registrations']['password']))
    $this->data['Registrations']['password'] = Security::hash($this->data['Registrations']['password'], null, true);
  return true;
}
public $validate = array(
                     'first_name'=>array(
                  'rule'=>'alphaNumeric',
                  'required'=> true,
                  'allowEmpty'=>false,
                  'message'=>'Please Enter Your Name'
                  ),
                  'last_name'=>array(

                   'rule'=>'alphaNumeric',
                   'required'=>true,
                   'allowEmpty'=>false,
                   'message'=>"Please Enter Your Last Name."


                  ),

                  'email'=>array(

                   'rule'=>'email',
                   'required'=>true,
                   'allowEmpty'=>false,
                   'message'=>"Please Enter Your Email address."


                  )
                   ,


                    'password'=>array(

                   'rule'=>'alphaNumeric',
                   'required'=>true,
                   'allowEmpty'=>false,
                   'message'=>"Please Enter Your Password."


                  ),
                      'phone'=>array(

                   'rule'=>'Numeric',
                   'required'=>true,
                   'allowEmpty'=>false,
                   'message'=>"Please Enter Your Phone No.."


                  )



                  ,
                      'state'=>array(

                   'rule'=>'alphaNumeric',
                   'required'=>true,
                   'allowEmpty'=>false,
                   'message'=>"Please Enter Your Sate"


                  )

                    ,
                      'city'=>array(

                   'rule'=>'alphaNumeric',
                   'required'=>true,
                   'allowEmpty'=>false,
                   'message'=>"Please Enter Your City"


                  )


);

}

最後に、Appcontrollerにいくつかのロジックを使用しました

class AppController extends Controller {

public $components = array(
    'Auth' => array(
        'loginAction' => array(
            'controller' => 'Online',
            'action' => 'login'),

            'loginRedirect' => array(
            'controller' => 'Online',
            'action' => 'profile'),

                'logoutRedirect ' => array(
            'controller' => 'Online',
            'action' => 'login'),

        'authenticate' => array(
         'Registrations' => array(
                    'userModel' => 'RegistrationsModel',
                    'fields' => array(
                        'username' => 'email',
                        'password' => 'password'
                    )
        )
    )
    )
);



   function beforeFilter() {
       $this->Auth->allow('register','index','contact','quiz_zone','about','packages','online_test','test_gen','login');



      } 
}

正しい解決策を教えてください..事前に感謝します

4

1 に答える 1

0

ログイン用のテーブルの名前は関係ありません。CakePHP はその名前を強制しません。これは設定です。AuthComponentたとえば、AppController で設定する場合は、次のようにします。

$this->Auth->authenticate = array('Form' => array('userModel' => 'Registration'));

あなたの例では、間違った名前を渡しています: RegistrationsModel

したがって、あなたの例では、これは非常に間違っています:

 'authenticate' => array(
         'Registrations' => array(
                    'userModel' => 'RegistrationsModel',
                    'fields' => array(
                        'username' => 'email',
                        'password' => 'password'
                    )
        )

第 1 レベルのキーは、認証タイプ(フォーム、基本、ダイジェスト) である必要がありRegistrationsます。次に、説明したように、次のことができます。

 'authenticate' => array(
         'Form' => array(
                    'userModel' => 'Registration',
                    'fields' => array(
                        'username' => 'email',
                        'password' => 'password'
                    )
        )

これはすべて本で非常によく説明されています - herehere

もう 1 つの非常に悪いことは、CakePHP の規約に従っていることです。Cake は「Convention over Configuration」の哲学に従います。たとえば、モデルは複数形ではなく単数形にする必要があります...本を読んでください。トゥロティオールから始めます。

于 2013-06-05T10:06:06.953 に答える