symfony1 avait une fonction d'assistance appelée Twig incluait une fonction comme celle-ci? J'ai regardé sur Google et traversé le code, mais je ne peux en trouver un. Je peux évidemment coder un moi-même, mais je ne veux pas reproduire quelque chose si c'est déjà là. P>
Si je fais le code un moi-même, il s'agissait d'une fonction ou d'un filtre? p> auto_link_text () code>, qui a analysé un bloc de texte et enveloppé toutes les URL de texte dans
code> Tags, peuplement automatique du
href code> attribut. p>
3 Réponses :
La fonction n'existe pas dans la branche, mais vous pouvez même ajouter vos propres extensions à la branche:
class AutoLinkTwigExtension extends \Twig_Extension { public function getFilters() { return array('auto_link_text' => new \Twig_Filter_Method($this, 'auto_link_text', array('is_safe' => array('html'))), ); } public function getName() { return "auto_link_twig_extension"; } static public function auto_link_text($string) { $regexp = "/(<a.*?>)?(https?)?(:\/\/)?(\w+\.)?(\w+)\.(\w+)(<\/a.*?>)?/i"; $anchorMarkup = "<a href=\"%s://%s\" target=\"_blank\" >%s</a>"; preg_match_all($regexp, $string, $matches, \PREG_SET_ORDER); foreach ($matches as $match) { if (empty($match[1]) && empty($match[7])) { $http = $match[2]?$match[2]:'http'; $replace = sprintf($anchorMarkup, $http, $match[0], $match[0]); $string = str_replace($match[0], $replace, $string); } } return $string; } }
Cette solution semble fonctionner de manière incorrecte pour moi si l'URL dispose déjà d'un http: // code> préfixe. Dans ce cas, le HREF résultant sera quelque chose comme
http: // http: //google.com code>. Ce qui est réparé pour moi, remplaçait la troisième argument
$ match [0] code> à Sprintf avec
$ match [4]. $ match [5]. "." . $ match [6] code>.
Si vous utilisez Twig à l'intérieur de Symfony2, il y a un paquet pour cela: https://github.com/liip / Liipurlautoconverterbundle p>
Si vous l'utilisez en dehors de Symfony2, vous pouvez soumettre un PR à eux afin de découpler le paquet et la rallonge de la branche! P>
L'autre "réponse" énumérée est un peu obsolète et a des problèmes. Celui-ci fonctionnera dans les dernières versions de Symfony et comporte moins de problèmes