| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\Translation\Provider;use Symfony\Component\Translation\Exception\InvalidArgumentException;use Symfony\Component\Translation\Exception\MissingRequiredOptionException;/** * @author Fabien Potencier <fabien@symfony.com> * @author Oskar Stark <oskarstark@googlemail.com> */final class Dsn{    private $scheme;    private $host;    private $user;    private $password;    private $port;    private $path;    private $options;    private $originalDsn;    public function __construct(string $dsn)    {        $this->originalDsn = $dsn;        if (false === $parsedDsn = parse_url($dsn)) {            throw new InvalidArgumentException(sprintf('The "%s" translation provider DSN is invalid.', $dsn));        }        if (!isset($parsedDsn['scheme'])) {            throw new InvalidArgumentException(sprintf('The "%s" translation provider DSN must contain a scheme.', $dsn));        }        $this->scheme = $parsedDsn['scheme'];        if (!isset($parsedDsn['host'])) {            throw new InvalidArgumentException(sprintf('The "%s" translation provider DSN must contain a host (use "default" by default).', $dsn));        }        $this->host = $parsedDsn['host'];        $this->user = '' !== ($parsedDsn['user'] ?? '') ? urldecode($parsedDsn['user']) : null;        $this->password = '' !== ($parsedDsn['pass'] ?? '') ? urldecode($parsedDsn['pass']) : null;        $this->port = $parsedDsn['port'] ?? null;        $this->path = $parsedDsn['path'] ?? null;        parse_str($parsedDsn['query'] ?? '', $this->options);    }    public function getScheme(): string    {        return $this->scheme;    }    public function getHost(): string    {        return $this->host;    }    public function getUser(): ?string    {        return $this->user;    }    public function getPassword(): ?string    {        return $this->password;    }    public function getPort(int $default = null): ?int    {        return $this->port ?? $default;    }    public function getOption(string $key, $default = null)    {        return $this->options[$key] ?? $default;    }    public function getRequiredOption(string $key)    {        if (!\array_key_exists($key, $this->options) || '' === trim($this->options[$key])) {            throw new MissingRequiredOptionException($key);        }        return $this->options[$key];    }    public function getOptions(): array    {        return $this->options;    }    public function getPath(): ?string    {        return $this->path;    }    public function getOriginalDsn(): string    {        return $this->originalDsn;    }}
 |