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'));
}
}
}
有什麼奇怪的是,它爲 「鎮」,而不是爲「公司」。 對於公司,「關聯保存」工作在我的註冊功能,所以連接功能,我無法恢復會話的值,爲什麼,我不知道,謝謝...
感謝;)它仍然是相同的,我想這是我的數組中使用的Auth.Company列的第一個id,它必須是company_id的相同值,所以16 ...它是w eird:/我是否也需要改變我的公司模式? – user3790914 2014-09-22 20:10:34
@ user3790914 - 我相信你的登錄代碼假設在你使用'field'方法之前設置了公司和城鎮。作爲IF塊的第一條語句,試試'$ this-> User-> Company-> id = $ this-> Auth-> user('company_id')'。 – AgRizzo 2014-09-22 20:59:09
謝謝,你能編輯你的文章嗎?我需要把這個代碼放在哪裏?我的意思是在哪種情況下? – user3790914 2014-09-22 21:02:12