File Manager

Current Directory: /home/astoriaah/www/templates/yootheme/vendor/yootheme/framework/modules/app/src
Viewing File: /home/astoriaah/www/templates/yootheme/vendor/yootheme/framework/modules/app/src/UrlGenerator.php
<?php namespace YOOtheme; use Psr\Http\Message\UriInterface; use YOOtheme\Http\Uri; use YOOtheme\Util\Str; class UrlGenerator { /** * @var UriInterface */ protected $uri; /** * @var \SplStack */ protected $resolver; /** * Constructor. * * @param UriInterface $uri */ public function __construct(UriInterface $uri) { $this->uri = $uri; $this->resolver = new \SplStack(); $this->resolver->push([$this, 'generateUrl']); } /** * Gets the URL base path. * * @param bool $secure * @return string */ public function base($secure = null) { if (is_null($secure)) { return $this->uri->getBasePath(); } return $this->uri->withScheme($secure ? 'https' : 'http')->getBaseUrl(); } /** * Generates a URL to a path. * * @param string $path * @param array $parameters * @param bool $secure * @return string */ public function to($path, array $parameters = [], $secure = null) { try { if (empty($parameters) && is_null($secure) && $this->validateUrl($path)) { return $path; } $resolve = $this->resolver->top(); return (string) $resolve($path, $parameters, $secure); } catch (\Exception $e) { return false; } } /** * Generates a URL to a route. * * @param string $pattern * @param array $parameters * @param bool $secure * @return string */ public function route($pattern = '', array $parameters = [], $secure = null) { throw new \BadMethodCallException('Must be implemented.'); } /** * Adds a URL resolver. * * @param callable $resolver * @return self */ public function addResolver(callable $resolver) { $next = $this->resolver->top(); $this->resolver->push(function ($path, $parameters, $secure) use ($resolver, $next) { return $resolver($path, $parameters, $secure, $next); }); return $this; } /** * Generates a URL to a path. * * @param string $path * @param array $parameters * @param bool $secure * @return Uri */ public function generateUrl($path, array $parameters = [], $secure = null) { $url = Uri::fromString($path, $this->uri->getBasePath()); $abs = Str::startsWith($url->getPath(), '/') || $url->getHost(); if (!$abs) { $url = $url->withPath('/'.$url->getPath()); } if ($query = array_replace($url->getQueryParams(), $parameters)) { $url = $url->withQueryParams($query); } if (is_bool($secure)) { if (!$url->getHost()) { $url = $url->withHost($this->uri->getHost())->withPort($this->uri->getPort()); } $url = $url->withScheme($secure ? 'https' : 'http'); } return $url; } /** * Checks if the given path is a valid URL. * * @param string $path * @return bool */ protected function validateUrl($path) { $valid = ['http://', 'https://', 'mailto:', 'tel:', '//', '#']; return Str::startsWith($path, $valid) || filter_var($path, FILTER_VALIDATE_URL); } }