Несколько полей на afterFind

У меня есть модель приложения 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

Решение

Проблема в том, что вы 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
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector