2021-08-11 13:45:30 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Encode our data so that it can be serialised
|
|
|
|
*/
|
|
|
|
namespace App\Traits;
|
|
|
|
|
|
|
|
trait EncodeUTF8
|
|
|
|
{
|
2021-09-08 12:07:00 +00:00
|
|
|
private function decode(array $values): void
|
|
|
|
{
|
|
|
|
$properties = (new \ReflectionClass($this))->getProperties();
|
|
|
|
|
|
|
|
$class = get_class($this);
|
|
|
|
|
|
|
|
foreach ($properties as $property) {
|
|
|
|
if ($property->isStatic()) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$name = $property->getName();
|
|
|
|
$decode = in_array($name,self::cast_utf8);
|
|
|
|
|
|
|
|
if ($property->isPrivate()) {
|
|
|
|
$name = "\0{$class}\0{$name}";
|
|
|
|
} elseif ($property->isProtected()) {
|
|
|
|
$name = "\0*\0{$name}";
|
|
|
|
}
|
|
|
|
|
|
|
|
if (! array_key_exists($name,$values)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$property->setAccessible(true);
|
|
|
|
|
|
|
|
$property->setValue(
|
|
|
|
$this,$decode ? utf8_decode($values[$name]) : $values[$name]
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-08-11 13:45:30 +00:00
|
|
|
private function encode(): array
|
|
|
|
{
|
|
|
|
$values = [];
|
|
|
|
|
|
|
|
$properties = (new \ReflectionClass($this))->getProperties();
|
|
|
|
|
|
|
|
$class = get_class($this);
|
|
|
|
|
|
|
|
foreach ($properties as $property) {
|
|
|
|
// Dont serialize the validation error
|
|
|
|
if ($property->name == 'errors')
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if ($property->isStatic()) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$property->setAccessible(true);
|
|
|
|
|
|
|
|
if (! $property->isInitialized($this)) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
$name = $property->getName();
|
|
|
|
$encode = in_array($name,self::cast_utf8);
|
|
|
|
|
|
|
|
if ($property->isPrivate()) {
|
|
|
|
$name = "\0{$class}\0{$name}";
|
|
|
|
} elseif ($property->isProtected()) {
|
|
|
|
$name = "\0*\0{$name}";
|
|
|
|
}
|
|
|
|
|
|
|
|
$property->setAccessible(true);
|
|
|
|
$value = $property->getValue($this);
|
|
|
|
|
|
|
|
$values[$name] = $encode ? utf8_encode($value) : $value;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $values;
|
|
|
|
}
|
|
|
|
}
|