通过电子邮件将文本中的地址发送到mailto超链接(在Twig中可以吗?)

时间:2018-11-22 12:34:44

标签: php symfony twig

我有一个实体,其文本类型属性称为contactInfo。在表单中输入这些详细信息时,用户只能提交不带html的文本。通常,在此文本区域中的某处输入电子邮件地址(以及更多详细信息)。

现在,当我显示此contactInfo时,我想将任何电子邮件地址调整为带有mailto超链接的电子邮件地址。例如

Email us at: example@email.com. 

应成为:

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

该如何处理?我可以使用某些RegEx或Replace过滤器直接在Twig中执行此操作吗?还是我应该在控制器中真正做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以创建一个树枝过滤器,例如“ 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