AbstractPostSerializable.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <?php
  2. namespace DNB;
  3. use ReflectionClass;
  4. abstract class AbstractPostSerializable implements PostSerializableInterface {
  5. public static function fromPostParams(array $post): PostSerializableInterface {
  6. $vars = [];
  7. foreach (static::getPostParams() as $key => $required) {
  8. $vars[$key] = isset($post[$key]) && ((bool)$post[$key]) && strtolower((string)$post[$key]) != "off" ? htmlspecialchars($post[$key], ENT_QUOTES | ENT_SUBSTITUTE) : null;
  9. if ($vars[$key] == null && $required)
  10. throw new \Symfony\Component\HttpClient\Exception\InvalidArgumentException(
  11. sprintf("Missing required argmuent: %s", $key)
  12. );
  13. }
  14. return new static(...array_values($vars));
  15. }
  16. protected static function removePrefix(string $param): string {
  17. return ltrim(strstr($param, '-'), '-');
  18. }
  19. final public static function getPostParams(bool $short = false): array {
  20. $vars = [];
  21. foreach ((new ReflectionClass(static::class))->getConstructor()->getParameters() as $param) {
  22. if ($short)
  23. $vars[$param->getName()] = !($param->isOptional() || $param->allowsNull());
  24. else
  25. $vars[sprintf('%s-%s', static::namespace(), $param->getName())] = !($param->isOptional() || $param->allowsNull());
  26. }
  27. return $vars;
  28. }
  29. public static function namespace(): string {
  30. return strtolower(basename(str_replace('\\', DIRECTORY_SEPARATOR, static::class)));
  31. }
  32. }