Add u() and r() method to PhpRenderer

- Add Router dependency
This commit is contained in:
Hypolite Petovan 2020-06-13 13:20:49 -04:00
parent 0cdbd3af2d
commit 57dd610e73
2 changed files with 56 additions and 2 deletions

View file

@ -2,6 +2,9 @@
namespace Friendica\Directory\Views; namespace Friendica\Directory\Views;
use Friendica\Directory\Utils\Url;
use Slim\Router;
/** /**
* Zend-Escaper wrapper for Slim PHP Renderer * Zend-Escaper wrapper for Slim PHP Renderer
* *
@ -32,10 +35,15 @@ class PhpRenderer extends \Slim\Views\PhpRenderer
* @var \Gettext\TranslatorInterface * @var \Gettext\TranslatorInterface
*/ */
private $l10n; private $l10n;
/**
* @var Router
*/
private $router;
public function __construct( public function __construct(
\Zend\Escaper\Escaper $escaper, \Zend\Escaper\Escaper $escaper,
\Gettext\TranslatorInterface $l10n, \Gettext\TranslatorInterface $l10n,
Router $router,
string $templatePath = "", string $templatePath = "",
array $attributes = array() array $attributes = array()
) )
@ -44,6 +52,7 @@ class PhpRenderer extends \Slim\Views\PhpRenderer
$this->escaper = $escaper; $this->escaper = $escaper;
$this->l10n = $l10n; $this->l10n = $l10n;
$this->router = $router;
} }
public function e(string $value): string public function e(string $value): string
@ -58,7 +67,7 @@ class PhpRenderer extends \Slim\Views\PhpRenderer
} elseif (method_exists($this->l10n, $name)) { } elseif (method_exists($this->l10n, $name)) {
return $this->l10n->$name(...$arguments); return $this->l10n->$name(...$arguments);
} else { } else {
throw new \Exception('Unknown PhpRendere magic method: ' . $name); throw new \Exception('Unknown PhpRenderer magic method: ' . $name);
} }
} }
@ -172,5 +181,45 @@ class PhpRenderer extends \Slim\Views\PhpRenderer
return !empty($args[1]) && is_array($args[1]) ? strtr($text, $args[1]) : vsprintf($text, $args); return !empty($args[1]) && is_array($args[1]) ? strtr($text, $args[1]) : vsprintf($text, $args);
} }
/**
* Return the URL of the provided route and parameters
*
* @param string $name
* @param array $data
* @param array $queryParams
* @return string
*/
function r(string $name, array $data = [], array $queryParams = [])
{
if ($this->getAttribute('zrl')) {
$queryParams['zrl'] = $this->getAttribute('zrl');
}
return $this->router->pathFor($name, $data, $queryParams);
}
/**
* Add sitewide ZRL support for external URLs
*
* @param string $url
*/
function u(string $url)
{
if ($this->getAttribute('zrl')) {
$queryParameters = [];
$parsed = parse_url($url);
if (!empty($parsed['query'])) {
parse_str($parsed['query'], $queryParameters);
}
$queryParameters['zrl'] = $this->getAttribute('zrl');
$parsed['query'] = http_build_query($queryParameters);
$url = Url::unparse($parsed);
}
return $url;
}
} }

View file

@ -25,7 +25,12 @@ $container['escaper'] = function (ContainerInterface $c): Zend\Escaper\Escaper {
// view renderer // view renderer
$container['renderer'] = function (ContainerInterface $c): Friendica\Directory\Views\PhpRenderer { $container['renderer'] = function (ContainerInterface $c): Friendica\Directory\Views\PhpRenderer {
$settings = $c->get('settings')['renderer']; $settings = $c->get('settings')['renderer'];
return new Friendica\Directory\Views\PhpRenderer($c->get('escaper'), $c->get('l10n'), $settings['template_path']); return new Friendica\Directory\Views\PhpRenderer(
$c->get('escaper'),
$c->get('l10n'),
$c->get('router'),
$settings['template_path']
);
}; };
// monolog // monolog