CakePHP未完全解密虚拟字段

CakePHP未完全解密虚拟字段,php,cakephp,encryption,Php,Cakephp,Encryption,我在CakePHP 2.4.1应用程序中遇到了一个问题,其中一个模型中的虚拟字段没有使用Cake的Security::rijndael正确解密。在我的用户模型中,显示字段定义为 public $virtualFields = array( 'name' => 'CONCAT(User.first_name, " ", User.last_name)' ); User.first\u name和User.last\u name都是加密的,User.name是模型的显示字段。在Assigne

我在CakePHP 2.4.1应用程序中遇到了一个问题,其中一个模型中的虚拟字段没有使用Cake的Security::rijndael正确解密。在我的用户模型中,显示字段定义为

public $virtualFields = array( 'name' => 'CONCAT(User.first_name, " ", User.last_name)' );
User.first\u name和User.last\u name都是加密的,User.name是模型的显示字段。在AssignedShift相关模型User hasMany AssignedShift中,未正确解密User.name字段。以下是一个示例返回:

Array(
    [1] => Test|�d�F�3��������������S0�Dy=>�dJ���sP�4�F�n�؄s-#���7P���n�ʙ.�C�@���˷C�z��(;Eu)�
)
这是唯一一个发生这种情况的模型,所以我很有信心我的afterFind方法能够正常工作。在任何情况下,下面是用于加密/解密的函数:

/*AppModel.php*/
function _afterFind($results, $primary) {

    if( $primary ) {
        foreach( $results as $key => $val) {
            if( isset( $val[$this->alias] ) ) {
                $results[$key][$this->alias] = $this->doAfterFind( $results[$key][$this->alias] );
            }
        }
    } else {
        if( isset( $results['id']) ) {
            $results = $this->doAfterFind($results);
        } else {
            foreach( $results as $key => $val ) {
                if( isset( $val[$this->alias] ) ) {
                    if( isset( $val[$this->alias]['id'] ) ) {
                        $results[$key][$this->alias] = $this->doAfterFind( $results[$key][$this->alias] );
                    } else {
                        foreach( $results[$key][$this->alias] as $key2 => $val2 ) {
                            $results[$key][$this->alias][$key2] = $this->doAfterFind( $results[$key][$this->alias][$key2] );
                        }
                    }
                }
            }
        }
    }

    return $results;
}

public function doAfterFind($data) {
    foreach( $data as $key => $val) {
        if( !empty( $val ) && strlen( $val ) >= 88) {
            $data[$key] = Security::rijndael( base64_decode( $val ), Configure::read( 'Security.cipherSeed' ), 'decrypt' );
        }
    }
    //My attempt at hacking it back together
    if(array_key_exists('first_name', $data)) {
        $data['name'] = $data['first_name'] ." ". $data['last_name'];
    }
    return $data;
}

/*AssignedShift.php*/
public function afterFind($results, $primary = false) {
    return $this->_afterFind($results, $primary);
}

这两个模型都是从控制台创建的-用户已经被修改,但我还没有涉及到关系,而AssignedShift完全没有涉及。有什么想法吗?提前谢谢。

看起来不错。可能是encodetry this//public$virtualFields=array'name'=>'CONCATfirst_name,,last_name'@Jason您应该显示有问题的代码在哪里进行解密,并解释在不明显的情况下使用的加密类型。另外,请始终提及您的确切CakePHP版本@谢谢,我已经添加了上面的代码。我想,仅仅因为我假设它起作用并不意味着它真的起作用了!