2013-07-02 76 views
0

我試圖在Cake 1.3.10中創建一個登錄函數,它檢查用戶名和密碼以外的額外條件。我爲此使用$ this-> Auth-> userScope。Cakephp:在用戶範圍中使用或條件

如果我檢查一個條件,它工作正常。我在beforeFilter()有這樣的:

$this->Auth->userScope = array('User.status' => 1); 

不過,如果我使用和OR(像出土文物)它不工作:

$this->Auth->userScope = array('OR'=> array('User.status' => 1, 'User.status' => 2)); 

這樣做,它忽略了第一條件的,只考慮第二個。

有什麼辦法可以用userScope實現這個嗎?

+0

什麼蛋糕版?你應該總是提到你正在使用的確切版本。因爲在2.x中這不會以這種方式工作(http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#configuring-authentication-handlers)。 – mark

+0

@mark你是對的,我忘了,它的蛋糕1.3.10(剛剛編輯的問題包括) – Albert

回答

3

基本的PHP。 它不會忽略它,但由於數組的性質會覆蓋第一個和第二個。 您可能不會多次在一個數組中使用相同的密鑰。

因此,它是:

$this->Auth->userScope = array(
    'OR' => array(array('User.status' => 1), array('User.status' => 2))) 

或者在你的情況下,由於其CakePHP的我們(合併它們)談到,清潔液:

$this->Auth->userScope = array('User.status' => array(1, 2)); 

將在一個簡單的轉化「IN(1,2)」聲明。

+0

感謝您的回覆。關於「基本PHP」的一點是相對的,它取決於每個函數如何處理輸入數組。例如,在find()中,它的工作原理就像我沒有合併具有相同密鑰的2個元素一樣... – Albert

+0

不,它沒有。它不能。相信我。 – mark

+0

我有「發現」在其他地方使用OR條件,他們工作得很好,相信我;) – Albert