How to register afterMarshal in CakePHP 4.1

200 views Asked by At

I noticed that there is new afterMarshal event in 4.1.

Where to put it? In Table model? And how?

I want to do some work with results every time it's loaded.

Thanks for help

1

There are 1 answers

0
Love Kumar On

For Encryption and Decryption through model in '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;
            });
        }
    );  
}