2014-02-16 53 views
0

我有以下代碼從另一個控制器模型邏輯檢查一個控制器模型使用的枚舉

class PostsController extends AppController { 

    public function approve($id = null, $user = true) { 
     if (!$id) { 
      throw new NotFoundException(__('Invalid article')); 
     } 

     $post = $this->Post->findById($id); 
     if(!$post) { 
      throw new NotFoundException(__('Invalid article')); 
     } 

     if ($user['role'] == 'moderator') { 
      $this->Post->saveField("approval",'Approved by Moderator'); 
     } 
     elseif ($user['role'] == 'admin') { 
      $this->Post->saveField("approval",'Posted!'); 
     } 
     $this->redirect(array('action'=>'index'); 
    } 
} 

我試圖使用當前用戶的「角色」($user['role']),這是一個枚舉,支配這個動作是做什麼的。但我似乎無法得到這個工作。

我是否必須採取不同的方式來確保它知道控制器需要使用用戶模型?

+0

你從哪裏得到'$ user'變量?通常你必須從會話'$ user = $ this-> Session-> read('Auth.user');' – arilia

+0

我有它在AppController中設置,我認爲它會級聯。當我在視圖中回顯$ current_user [role]或$ user [role]時,我得到正確的值,但是在控制器函數中這怎麼能起作用呢? – user3298823

回答

2

在你AppController似乎你有類似

$this->set('user', $user); 

您還應該添加

public $loggedUser; 

然後

$this->loggedUser = $user; 

這樣,你發送loggedUser到所有控制器。

PostsController,你需要

if ($this->loggedUser['role'] == 'moderator') { 
    // .. 
} 

請注意,您可以輕鬆地與任何控制器內記錄的用戶信息工作與

$this->Auth->user(); 

你可以有

if $this->Auth->user('role') == 'moderator') { 
    // ... 
} 

http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#accessing-the-logged-in-user

+0

事實上,使用'Auth'應該是要走的路 – Eagle

+0

是的,auth更容易,更有意義。但是如果他想將其他數據發送給所有控制器,他可以使用「AppController」 – cornelb

相關問題