* @author Dennis Eichhorn * @copyright 2013 Dennis Eichhorn * @license OMS License 1.0 * @version 1.0.0 * @link http://orange-management.com */ namespace phpOMS\Uri; /** * UriFactory class. * * Used in order to create a uri * * @category Uri * @package Framework * @author OMS Development Team * @author Dennis Eichhorn * @license OMS License 1.0 * @link http://orange-management.com * @since 1.0.0 */ class UriFactory { /** * Dynamic query elements. * * @var \string[] * @since 1.0.0 */ private static $uri = []; /** * Constructor. * * @since 1.0.0 * @author Dennis Eichhorn */ private function __construct() { } /** * Set global query replacements. * * @param \string $key Replacement key * * @return false|string * * @since 1.0.0 * @author Dennis Eichhorn */ public static function getQuery(\string $key) { if (isset(self::$uri[$key])) { return self::$uri[$key]; } return false; } /** * Set global query replacements. * * @param \string $key Replacement key * @param \string $value Replacement value * @param \bool $overwrite Overwrite if already exists * * @return void * * @since 1.0.0 * @author Dennis Eichhorn */ public static function setQuery(\string $key, \string $value, \bool $overwrite = true) { if ($overwrite || !isset(self::$uri[$key])) { self::$uri[$key] = $value; } } /** * Build uri. * * @param \string $uri Path data * @param array $toMatch Optional special replacements * @param UriScheme|\int $scheme Scheme type * * @return null|string * * @throws \Exception * * @since 1.0.0 * @author Dennis Eichhorn */ public static function build(\string $uri, array $toMatch = [], \int $scheme = UriScheme::HTTP) { $uri = preg_replace_callback('(\{[\/#\?@\.][a-zA-Z0-9]*\})', function ($match) use ($toMatch) { $match = substr($match[0], 1, strlen($match[0]) - 2); return $toMatch[$match] ?? self::$uri[$match] ?? $match; }, $uri); return $uri; } }