2013-06-04 1 views
0

i m новичок для cakephp, и я хочу войти в систему с помощью разных имен таблиц MySQL. так как в соответствии с книгой cakephp для регистрации и регистрации пользователя и его контроллера и модели пользователя требуется таблица с именами пользователей. но мой вопрос. есть ли способ входа в систему с таблицей регистрации? Здесь я определяю вам все страницы.Как мне войти с таблицей регистрации в cakephp 2.3

Контроллер AppController.php OnlineController.php (эта страница является основным контроллером для моего сайта.)

Модель AppModel.php Registrations.php

Просмотр регистр .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 и код is

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" 


       ) 


); 

В прошлом я useed некоторую логику для 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'); 



     } 
} 

Пожалуйста, дайте мне правильные solution..Thanks в Advance

ответ

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' 
        ) 
     ) 

Ключ первого уровня должен быть authentication type (форма, Basic, Digest) не Registrations. Тогда, как я объяснил, что вы можете сделать:

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

Это все очень хорошо объяснено в книге - here и here.

Еще одна очень плохая вещь, которую вы НЕ ДЕЛАЕТ following the CakePHP Conventions! Торт следует философии «Конвенции над конфигурацией». Например, ваши модели должны быть единственными, а не множественными ... Прочитайте книгу. Начните с туротиалов.