Использование префикса вендора для расширения Twig

Я пытаюсь добавить свое собственное расширение в Twig.
Основное использование работает, но я хочу, чтобы я мог вызывать свои функции с префиксом поставщика.

Пример:
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

Редактировать:
Серьезно, если вы проголосуете за вопрос, потому что вы не понимаете, вопрос вообще бесполезен 🙂

1

Решение

Хорошо, как я думал и упоминал в своем ответе на мой пост:
Если вы установили расширение как глобальное, вы можете использовать его с префиксом поставщика.
Но это всегда ускользнет от вашего возвращения, поэтому, если вам нужны такие html-файлы, как я, вы должны ECHO вместо вашего возврата:

  public function link($text, $uri, array $additionalParams = array(), array $aTagParams = array(), $external=false)
{
$uri = $this->uri($uri, $additionalParams, $external);
// Some additional parsing
echo $url; // will be somehting like <a href="http://www.google.de" target="_blank">Go to Google now!</a>
}

В моем случае это то, что мне нужно, но это совсем не элегантно … Я оставлю этот вопрос открытым и не помечу это как правильный ответ, потому что я думаю, что должен быть более элегантный способ сделать это.

Спасибо @Matteo, чтобы вернуть меня к глобальному решению 🙂

С уважением,

Себастьян

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]