Использование префикса вендора для расширения 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, чтобы вернуть меня к глобальному решению:)

С уважением,

Себастьян

Другие вопросы по тегам