clam2021/vendor/slim/twig-view/src/TwigExtension.php
2021-05-13 13:04:00 -03:00

128 lines
3.2 KiB
PHP

<?php
/**
* Slim Framework (http://slimframework.com)
*
* @link https://github.com/slimphp/Twig-View
* @copyright Copyright (c) 2011-2015 Josh Lockhart
* @license https://github.com/slimphp/Twig-View/blob/master/LICENSE.md (MIT License)
*/
namespace Slim\Views;
use Slim\Http\Uri;
class TwigExtension extends \Twig\Extension\AbstractExtension
{
/**
* @var \Slim\Interfaces\RouterInterface
*/
private $router;
/**
* @var string|\Slim\Http\Uri
*/
private $uri;
public function __construct($router, $uri)
{
$this->router = $router;
$this->uri = $uri;
}
public function getName()
{
return 'slim';
}
public function getFunctions()
{
return [
new \Twig\TwigFunction('path_for', array($this, 'pathFor')),
new \Twig\TwigFunction('full_url_for', array($this, 'fullUrlFor')),
new \Twig\TwigFunction('base_url', array($this, 'baseUrl')),
new \Twig\TwigFunction('is_current_path', array($this, 'isCurrentPath')),
new \Twig\TwigFunction('current_path', array($this, 'currentPath')),
];
}
public function pathFor($name, $data = [], $queryParams = [], $appName = 'default')
{
return $this->router->pathFor($name, $data, $queryParams);
}
/**
* Similar to pathFor but returns a fully qualified URL
*
* @param string $name The name of the route
* @param array $data Route placeholders
* @param array $queryParams
* @param string $appName
* @return string fully qualified URL
*/
public function fullUrlFor($name, $data = [], $queryParams = [], $appName = 'default')
{
$path = $this->pathFor($name, $data, $queryParams, $appName);
/** @var Uri $uri */
if (is_string($this->uri)) {
$uri = Uri::createFromString($this->uri);
} else {
$uri = $this->uri;
}
$scheme = $uri->getScheme();
$authority = $uri->getAuthority();
$host = ($scheme ? $scheme . ':' : '')
. ($authority ? '//' . $authority : '');
return $host.$path;
}
public function baseUrl()
{
if (is_string($this->uri)) {
return $this->uri;
}
if (method_exists($this->uri, 'getBaseUrl')) {
return $this->uri->getBaseUrl();
}
}
public function isCurrentPath($name, $data = [])
{
return $this->router->pathFor($name, $data) === $this->uri->getBasePath() . '/' . ltrim($this->uri->getPath(), '/');
}
/**
* Returns current path on given URI.
*
* @param bool $withQueryString
* @return string
*/
public function currentPath($withQueryString = false)
{
if (is_string($this->uri)) {
return $this->uri;
}
$path = $this->uri->getBasePath() . '/' . ltrim($this->uri->getPath(), '/');
if ($withQueryString && '' !== $query = $this->uri->getQuery()) {
$path .= '?' . $query;
}
return $path;
}
/**
* Set the base url
*
* @param string|Slim\Http\Uri $baseUrl
* @return void
*/
public function setBaseUrl($baseUrl)
{
$this->uri = $baseUrl;
}
}