2014-09-22 54 views
0

我遇到了會話問題。用戶可以有公司或城鎮。對於城鎮,我可以使用Auth.Town發佈有關城市的信息(城鎮用戶ID =表鎮鎮的ID)。這對公司來說是一樣的(company_id = id),問題是我無法創建會話:Auth.Company,存在連接問題,正如你可以在我的數組中看到的那樣,我的id值是3,name是測試,這對應於公司3表的ID,當我應該有ID 16的信息。這是怎麼回事?我的模型中有錯誤?與用戶關聯的模型的奇怪會話行爲

[Auth] => Array 
     (
      [User] => Array 
       (
        [id] => 96 
        [email] => [email protected] 
        [avatar] => 
        [firstname] => Brian 
        [lastname] => Ferui 
        [created] => 2014-09-22 11:05:55 
        [modified] => 2014-09-22 11:05:55 
        [role] => user 
        [town_id] => 0 
        [company_id] => 16 
       ) 

      [Company] => Array 
       (
        [id] => 3 
        [name] => test 
        [legal_form] => 
       ) 

     ) 

型號用戶:

<?php 

class User extends AppModel{ 


    public $actsAs = array(
    'Upload' => array(
     'fields' => array(
      'avatar' => 'img/avatars/:id1000/:id' 
    ) 
    ) 
); 

    public $hasOne = array(
     'Company' => array(
      'className' => 'Company', 
      'foreignKey' => 'id', 
      'dependent' => true 
     ), 
     'Town' => array(
      'className' => 'Town', 
      'foreignKey' => 'id', 
      'dependent' => true 
     ) 
    ); 

    public $recursive = -1; 

    public $order = 'User.id DESC'; 

    public $validate = array(

     'email' => array(

      'rule'  => 'isUnique', 

      'allowEmpty' => false, 

      'message' => "Ce adresse e-mail est déja prise ou vide..." 

     ), 
     'password' => array(
      array(
      'rule' => 'notEmpty', 
      'allowEmpty' => false, 
      'message' => 'Le mot de passe ne peux pas être vide...' 
     ), 
      array(
      'rule' => array('minLength', 4), 
      'message' => 'Le mot de passe doit avoir au moins 4 caractères...' 
     ) 
    ), 
     'firstname' => array(
      array(
      'rule' => 'notEmpty', 
      'message' => 'Le prénom ne peux pas être vide...' 
     ) 
    ), 
     'lastname' => array(
      array(
      'rule' => 'notEmpty', 
      'message' => 'Le nom ne peux pas être vide...' 
     ) 
    ), 
    'avatar_file' => array(
      array(
      'rule' => array('fileExtension', array('jpg','png')), 
      'message' => 'Extension invalide...' 
     ) 
    ) 
    ); 

    public function beforeSave($options = array()){ 

     if(!empty($this->data['User']['password'])){ 

      $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']); 

     } 

     return true; 

    } 

} 

示範企業:在UsersController

<?php 

class Company extends AppModel{ 

    public $actsAs = array(
    'Upload' => array(
     'fields' => array(
      'logo' => 'img/logos/:id1000/:id' 
    ) 
    ) 
); 

public $hasMany = array(
    'User' => array(
     'className' => 'User', 
     'foreignKey' => 'company_id', 
     'dependent' => false 
    )); 

    public $validate = array(
    'name' => array(
      array(
      'rule' => 'notEmpty', 
      'message' => 'Le nom de l\'entreprise ne peux pas être vide...' 
     ) 
    ), 
    'logo_file' => array(
      array(
      'rule' => array('fileExtension', array('jpg','png')), 
      'message' => 'Extension invalide...' 
     ) 
    ) 
    ); 

} 



?> 

功能登錄

public function login() { 
    if ($this->request->is('post')) { 
     if (isset($this->request->data['UserLogin'])) { 
      $this->request->data['User'] = $this->request->data['UserLogin']; 
    } 

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

    if ($this->Auth->user('town_id') > '0') { 

    $towns = array('name', 'country', 'localisation', 'statut'); 
foreach($towns as $column) { 
    $this->Session->write(
     'Auth.Town.' . $column, 
     $this->User->Town->field($column) 
    ); 
} 

} 

    if ($this->Auth->user('company_id') > '0') { 

    $companies = array('name', 'legal_form'); 
foreach($companies as $column) { 
    $this->Session->write(
     'Auth.Company.' . $column, 
     $this->User->Company->field($column) 
    ); 
} 

} 

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

      }else{ 

       $this->Session->setFlash("L'adresse électronique ou votre mot de passe ne correspond pas","notif",array('type'=>'error')); 

      } 
    } 
} 

有什麼奇怪的是,它爲 「鎮」,而不是爲「公司」。 對於公司,「關聯保存」工作在我的註冊功能,所以連接功能,我無法恢復會話的值,爲什麼,我不知道,謝謝...

回答

1

從改變開始用戶模型中的relationships從hasOne到belongsTo。

  • hasOne是1:1間的關係
  • 屬於關聯是M:1名

代碼更改應該是:

public $belongsTo = array(
    'Company' => array(
     'className' => 'Company', 
     'foreignKey' => 'company_id' 
    ), 
    'Town' => array(
     'className' => 'Town', 
     'foreignKey' => 'town_id' 
    ) 
); 
+0

感謝;)它仍然是相同的,我想這是我的數組中使用的Auth.Company列的第一個id,它必須是company_id的相同值,所以16 ...它是w eird:/我是否也需要改變我的公司模式? – user3790914 2014-09-22 20:10:34

+1

@ user3790914 - 我相信你的登錄代碼假設在你使用'field'方法之前設置了公司和城鎮。作爲IF塊的第一條語句,試試'$ this-> User-> Company-> id = $ this-> Auth-> user('company_id')'。 – AgRizzo 2014-09-22 20:59:09

+0

謝謝,你能編輯你的文章嗎?我需要把這個代碼放在哪裏?我的意思是在哪種情況下? – user3790914 2014-09-22 21:02:12