Я пытаюсь добавить свое собственное расширение в 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
Редактировать:
Серьезно, если вы проголосуете за вопрос, потому что вы не понимаете, вопрос вообще бесполезен 🙂
Хорошо, как я думал и упоминал в своем ответе на мой пост:
Если вы установили расширение как глобальное, вы можете использовать его с префиксом поставщика.
Но это всегда ускользнет от вашего возвращения, поэтому, если вам нужны такие 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, чтобы вернуть меня к глобальному решению 🙂
С уважением,
Себастьян
Других решений пока нет …