Improve model serialization

Probably going to switch to spatie's package, though
This commit is contained in:
Dan Jones 2022-08-14 13:35:37 -05:00
commit 70e4404c22
2 changed files with 39 additions and 7 deletions

View file

@ -6,12 +6,12 @@ use App\Exceptions\Quit;
class Input extends Model
{
public ?array $files;
public ?string $url;
public ?string $destination;
public ?string $title;
public bool $low;
public bool $sync;
protected ?array $files = null;
protected ?string $url = null;
protected ?string $destination = null;
protected ?string $title = null;
protected bool $low = false;
protected bool $sync = false;
public function assertValid(): self
{

View file

@ -3,8 +3,11 @@
namespace App\Models;
use Illuminate\Support\Str;
use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Jsonable;
use JsonSerializable;
abstract class Model
abstract class Model implements Arrayable, JsonSerializable, Jsonable
{
public function __construct(array $data = [])
{
@ -22,4 +25,33 @@ abstract class Model
$this->$key = $value;
}
}
public function __get(string $key)
{
$getter = 'get' . Str::studly($key);
if (method_exists($this, $getter)) {
return $this->$getter($this->$key ?? null);
} elseif (property_exists($this, $key)) {
return $this->$key;
}
throw new \OutOfBoundsException(sprintf(
'Undefined property %s::%s', static::class, $key
));
}
public function toArray()
{
return get_object_vars($this);
}
public function jsonSerialize()
{
return $this->toArray();
}
public function toJson($options = 0)
{
return json_encode($this->jsonSerialize(), $options);
}
}