104 lines
2.4 KiB
PHP
104 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Enqueue\Dsn;
|
|
|
|
class QueryBag
|
|
{
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $query;
|
|
|
|
public function __construct(array $query)
|
|
{
|
|
$this->query = $query;
|
|
}
|
|
|
|
public function toArray(): array
|
|
{
|
|
return $this->query;
|
|
}
|
|
|
|
public function getString(string $name, string $default = null): ?string
|
|
{
|
|
return array_key_exists($name, $this->query) ? $this->query[$name] : $default;
|
|
}
|
|
|
|
public function getDecimal(string $name, int $default = null): ?int
|
|
{
|
|
$value = $this->getString($name);
|
|
if (null === $value) {
|
|
return $default;
|
|
}
|
|
|
|
if (false == preg_match('/^[\+\-]?[0-9]*$/', $value)) {
|
|
throw InvalidQueryParameterTypeException::create($name, 'decimal');
|
|
}
|
|
|
|
return (int) $value;
|
|
}
|
|
|
|
public function getOctal(string $name, int $default = null): ?int
|
|
{
|
|
$value = $this->getString($name);
|
|
if (null === $value) {
|
|
return $default;
|
|
}
|
|
|
|
if (false == preg_match('/^0[\+\-]?[0-7]*$/', $value)) {
|
|
throw InvalidQueryParameterTypeException::create($name, 'octal');
|
|
}
|
|
|
|
return intval($value, 8);
|
|
}
|
|
|
|
public function getFloat(string $name, float $default = null): ?float
|
|
{
|
|
$value = $this->getString($name);
|
|
if (null === $value) {
|
|
return $default;
|
|
}
|
|
|
|
if (false == is_numeric($value)) {
|
|
throw InvalidQueryParameterTypeException::create($name, 'float');
|
|
}
|
|
|
|
return (float) $value;
|
|
}
|
|
|
|
public function getBool(string $name, bool $default = null): ?bool
|
|
{
|
|
$value = $this->getString($name);
|
|
if (null === $value) {
|
|
return $default;
|
|
}
|
|
|
|
if (in_array($value, ['', '0', 'false'], true)) {
|
|
return false;
|
|
}
|
|
|
|
if (in_array($value, ['1', 'true'], true)) {
|
|
return true;
|
|
}
|
|
|
|
throw InvalidQueryParameterTypeException::create($name, 'bool');
|
|
}
|
|
|
|
public function getArray(string $name, array $default = []): self
|
|
{
|
|
if (false == array_key_exists($name, $this->query)) {
|
|
return new self($default);
|
|
}
|
|
|
|
$value = $this->query[$name];
|
|
|
|
if (is_array($value)) {
|
|
return new self($value);
|
|
}
|
|
|
|
throw InvalidQueryParameterTypeException::create($name, 'array');
|
|
}
|
|
}
|