2014-09-22 48 views
0

我有我的控制登錄操作。會話是爲Auth.User創建的,但不適用於Auth.Town。我需要創建會話。我在城鎮桌上有幾個字段,我不想創建50行。我怎樣才能讓它更容易?我需要簡化它。如何簡化我爲鏈接的模型創建的新會話?

UsersController:

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()) { 

      $this->Session->write(
         'Auth.Town.name', 
         $this->User->Town->field('name') 
       ); 

      $this->Session->write(
         'Auth.Town.country', 
         $this->User->Town->field('country') 
       ); 

      $this->Session->write(
         'Auth.Town.localisation', 
         $this->User->Town->field('localisation') 
       ); 

      $this->Session->write(
         'Auth.Town.statut', 
         $this->User->Town->field('statut') 
       ); 


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

      } 
    } 
} 
+0

uhhmmmmm。循環? – Ghost 2014-09-22 12:08:01

+0

請始終提及您的確切CakePHP版本! – ndm 2014-09-22 13:32:00

回答

0

好了,剛剛拿到列,然後循環和分配:

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

你應該記住'Model :: field()'爲每個調用發出一個單獨的SQL查詢,所以這是非常低效的。此外,身份驗證適配器支持包含使用'contains'的關聯,默認情況下它們使用'0'的遞歸設置,所以'belongsTo'和'hasOne'關聯(很確定'Town'使用其中一個)應該默認包含在內。 – ndm 2014-09-22 13:47:27

1

正如我檢查

$this->Session->read('Auth.User.Town.name'); 

必須有你想要的名稱有