Несколько полей на afterFind - PullRequest
0 голосов
/ 04 июля 2018

У меня есть модель приложения cakephp, в которой мне нужно расшифровать два поля. Для этой цели я использую обратный вызов afterFind. Это работает хорошо, но когда я добавляю второе поле в мой $ encryptedFields, расшифровывается только одно поле.

Мой код обратного вызова выглядит следующим образом:

public $encryptedFields = array('name', 'details');


public function beforeSave($options = array()) {
    foreach($this->encryptedFields as $fieldName){
        if(!empty($this->data[$this->alias][$fieldName])){
            $k = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
            $this->data[$this->alias][$fieldName] = Security::encrypt($this->data[$this->alias][$fieldName], $k);
        }                                           
    }
    return true;
}



public function afterFind($results, $primary = false) {
    foreach($this->encryptedFields as $fieldName){
        foreach ($results as $key => $val) {
            if (isset($val[$this->alias][$fieldName])) {
                $k = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
                $results[$key][$this->alias][$fieldName] = Security::decrypt($val[$this->alias][$fieldName], $k);
            }
        }
        return $results;
       }

}

Я включил функцию шифрования в beforeSave для иллюстративных целей, но это работает хорошо и шифрует два поля, как уже говорилось, моя проблема, похоже, связана с результатами afterFind $, но у меня нет идей. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 04 июля 2018

Проблема в том, что вы return из своего цикла foreach, прежде чем выполнять итерацию по каждому элементу в массиве $encryptedFields. Переместите return $results; из цикла foreach, и вы сможете расшифровать оба поля.

public function afterFind($results, $primary = false) {
    foreach($this->encryptedFields as $fieldName){
        foreach ($results as $key => $val) {
            if (isset($val[$this->alias][$fieldName])) {
                $k = 'wt1U5MACWJFTXGenFoZoiLwQGrLgdbHA';
                $results[$key][$this->alias][$fieldName] = Security::decrypt($val[$this->alias][$fieldName], $k);
            }
        }
    }
    return $results; // move this here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...