Я пытаюсь добавить собственное расширение на Twig. Основное использование работает, но я хочу, чтобы я мог вызывать свои функции с префиксом поставщика.Использование префикса поставщика для Twig Extension
Пример: LinkViewHelper:
class LinkViewHelper extends \Twig_Extension {
public function getFunctions()
{
return array(
'link' => new \Twig_Filter_Method(
$this,
'link',
array('is_safe' => array('html'))
)
);
}
public function link($text, $uri, array $additionalParams = array(), array $aTagParams = array(), $external=false)
{
$uri = $this->uri($uri, $additionalParams, $external);
// Some additional parsing
return $url; // will be somehting like <a href="http://www.google.de" target="_blank">Go to Google now!</a>
}
public function uri($uri, array $additionalParams = array(), $external = false)
{
// Some parsing goes here
return $uri; // will be something like http://www.google.com/
}
/**
* Returns the name of the extension.
*
* @return string The extension name
*/
public function getName()
{
return 'url';
}
}
Загрузка в моей начальной загрузки:
$this->environment->addExtension(new LinkViewHelper());
Теперь я могу вызвать функцию с {{ link }}
, но то, что я хочу, чтобы назвать это как {{ url.link }}
. Как я могу это достичь?
С уважением, cefuroX
Edit: Серьезно, вниз голосование вопрос, потому что вы не понимаете, вопрос не полезно вообще :)
Почему бы не добавить фильтр вместо функции, так что вы можете сделать '{URL | ссылка } '? Если вы хотите сделать '{{url.link}}, ссылка функции должна быть функцией URL-адреса объекта. – Med
Потому что «url» - это не строка, а имя ViewHelper. И это логически не фильтр. Я не хочу фильтровать URL-адрес, который я хочу создать. Фильтр не является полезным вариантом здесь. –
Вы пытались зарегистрировать свой объект как глобальный, как описано [здесь] (http://twig.sensiolabs.org/doc/advanced.html#globals)? – Matteo