Адрес электронной почты в тексте к почте на гиперссылку (возможно в Twig?) - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть объект с атрибутом текстового типа, который называется contactInfo.Пользователи могут отправлять текст без HTML только при вводе этих данных в форму.Часто адрес электронной почты вводится где-то в этой текстовой области (вместе с более подробной информацией).

Теперь, когда я отображаю это contactInfo, я хотел бы настроить любой адрес электронной почты на адрес электронной почты с гиперссылкой mailto.Например,

Email us at: example@email.com. 

должно стать:

Email us at: <a href="mailto:example@email.com">example@email.com</a>.

Как это сделать?Могу ли я сделать это напрямую в Twig с помощью фильтра RegEx или Replace?Или я действительно должен сделать это в контроллере?

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете создать фильтр веток, что-то вроде «mailTo» и сделать что-то вроде

<?php
   namespace App\Twig;

    use Twig\Extension\AbstractExtension;
    use Twig\TwigFilter;

    class AppExtension extends AbstractExtension
    {
        public function getFilters()
        {
            return array(
                new TwigFilter('mailTo', array($this, 'mailTo'), array('is_safe' => 'html')),
            );
        }

        public function mailTo(string $text)
        {
            if(preg_match_all('/[\p{L}0-9_.-]+@[0-9\p{L}.-]+\.[a-z.]{2,6}\b/u',$text,$mails)){
    foreach($mails[0]as $mail ){
        $text = str_replace($mail,'<a href="mailto:'.$mail.'">'.$mail.'</a>',$text);
    }
}


            return $text;
        }
    }

И затем использовать его в своем шаблоне вот так

contactInfo|mailTo

В любом случае, донне храните теги mailto: или html в базе данных, когда они всегда будут одинаковыми ...

документация по пользовательским фильтрам веток https://symfony.com/doc/current/templating/twig_extension.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...