如何在CakePHP 4.1中注册afterMarshal

问题描述

我注意到4.1中有一个新的afterMarshal事件。

放在哪里?在表模型中?又如何?

我希望每次加载结果时都要进行一些处理。

感谢帮助

解决方法

用于通过“ CAKEPHP 4”中的模型进行加密和解密

public $encryptedFields = ['first_name','last_name'];


 public function beforeSave($event,$entity,$options)
{
    foreach($this->encryptedFields as $fieldName)
    {            if($entity->has($fieldName))
        {         $entity->set($fieldName,encodeBeforeSave($entity->get($fieldName)));}
    }        return true;
}

public function beforeFind( $event,$query,$options)
{        $query->formatResults(
        function ($results)
        {                return $results->map(function ($row){
                foreach($this->encryptedFields as $fieldName) 
                {
                    if(isset($row[$fieldName]) && !empty($row[$fieldName]) ) 
                    {
                        $row[$fieldName] = decodeBeforefind($row[$fieldName]);
                    }
                }
                return $row;
            });
        }
    );  
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...