2013-07-02 3 views
0

Я пытаюсь создать функцию входа в Cake 1.3.10, которая проверяет дополнительное условие, кроме имени пользователя и пароля. Для этого я использую $ this-> Auth-> userScope.Cakephp: используйте OR условия в userScope

Если я проверяю только одно условие, он отлично работает. У меня это в моем beforeFilter():

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

Однако, если я использую и ИЛИ (например, в находках) не работает:

$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 вы правы, я забыл, это Cake 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() он работает так же, как и у меня, без слияния двух элементов для того же ключа ... – Albert

+0

Нет, это не так. Это невозможно. Доверьтесь мне. – mark

+0

У меня есть «находит», используя условия OR, подобные этому в других местах, и они работают отлично, доверяйте мне;) – Albert

Смежные вопросы