Использование postConditions с компонентом безопасности CakePHPs - PullRequest
0 голосов
/ 24 июля 2011

Для базового поиска модели в Cake я использовал метод postConditions .Это работало хорошо, пока я не включил защиту CSRF через компонент безопасности.

Включение этого компонента приводит к SQL Error: 1054: Unknown column '_Token.key' in 'where clause [...], и я вижу, что это происходит, потому что $this->data изменилось с:

Array (
    [CrmPerson] => Array
        (
            [firstname] => john
            [surname] => 
            [email] => 
        )
)

.... до .....

Array
(
    [_Token] => Array
        (
            [key] => 03aef38c3c2f631d6dc50baa98c7327a3fe6d0cd
            [fields] => 71d0fa03bc4e10f6f4d0de8f91674100836ea498%3A
        )

    [CrmPerson] => Array
        (
            [firstname] => john
            [surname] => 
            [email] => 
        )

)

Другими словами, присутствие [_Token] расстраивает вызов $this->postConditions.

Вся моя функция find () в контроллере выглядит следующим образом:

function find() {
    if(!empty($this->data)) {
        $this->CrmPerson->recursive = 0;
        $conditions = $this->postConditions(
            $this->data,
            array(
                'firstname' => 'LIKE',
                'surname' => 'LIKE',
                'email' => 'LIKE'
            )
        );

        $this->paginate = array(
            'order' => 'CrmPerson.created DESC',
            'limit' => '40',
        );
        $this->set('crmPeople', $this->paginate($conditions));
    }
}

Я пытался изменить $this->data на $this->data['CrmPerson'], но методу postConditions нужны данные для запуска на один уровень вышев массиве.

Нужно ли создавать целый новый массив для передачи postConditions или есть более простой вариант, которого я не вижу?

Ответы [ 2 ]

2 голосов
/ 25 июля 2011

Извините, у меня было медленное воскресенье ... просто перечитайте метод postConditions () @params в controller.php, и я пойму, где я ошибся.

Это:

        $conditions = $this->postConditions(
            $this->data,
            array(
                'firstname' => 'LIKE',
                'surname' => 'LIKE',
                'email' => 'LIKE'
        );

... должно быть ....

        $conditions = $this->postConditions(
            $this->data,
            array(
                'firstname' => 'LIKE',
                'surname' => 'LIKE',
                'email' => 'LIKE'
            ),'AND',true
        );
1 голос
/ 24 июля 2011
unset($this->data['_Token']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...