我正在使用Symfony 2.0.19。我正在尝试创建一个指向外部URL的超链接,该外部URL是从数据库中检索的。
我试过这个
<td><a href="{{dominio.url}}">{{dominio.url}}</a></td>
但我获得的路径是URL 里面的基本URL示例“localhost / web / www.tralalalala.com”的相对路径,而不仅仅是“www.tralalalala.com”。< / p>
我该怎么做?
答案 0 :(得分:8)
以下是 Pierrickouw 建议的具体示例:
在src/Twig
下创建一个Twig扩展或过滤器,并将其称为示例ExternalLinkFilter
。按如下方式定义类:
<?php
namespace AppBundle\Twig;
class ExternalLinkFilter extends \Twig_Extension
{
public function getFilters()
{
return array(
new \Twig_SimpleFilter('external_link', array($this, 'externalLinkFilter')),
);
}
/* source: http://stackoverflow.com/a/2762083/3924118 */
public function externalLinkFilter($url)
{
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
$url = "http://" . $url;
}
return $url;
}
public function getName()
{
return 'external_link_filter';
}
}
?>
现在,您应该在config/services.yml
中将此类注册为服务,如下所示:
services:
# other services
app.twig.external_link:
class: AppBundle\Twig\ExternalLinkFilter
public: false
tags:
- { name: twig.extension }
现在您只需使用名为external_link
的过滤器,就像使用任何Twig的默认过滤器一样,例如:
...
<a href="{{check.hostname | external_link }}"> {{check.hostname}}</a>
...
答案 1 :(得分:3)
答案 2 :(得分:0)
nbro的symfony 5版本的答案是: (这将处理从数据库读取的所有类型的网址)
来源:https://symfony.com/doc/current/templating/twig_extension.html
在src / Twig中创建文件
<?php
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
class ExternalLinkFilter extends AbstractExtension
{
public function getFilters()
{
return array(
new TwigFilter('external_link', array($this, 'externalLinkFilter')),
);
}
/* source: http://stackoverflow.com/a/2762083/3924118 */
public function externalLinkFilter($url)
{
if (!preg_match("~^(?:f|ht)tps?://~i", $url)) {
$url = "http://" . $url;
}
return $url;
}
public function getName()
{
return 'external_link_filter';
}
}
?>
您不需要将其注册为服务。 Symfony 5将注意到该Twig扩展的存在
按照@nbro的建议在树枝模板中使用
<a href="{{check.hostname | external_link }}"> {{check.hostname}}</a>