我正在使用 Symfony 2.0.19。我正在尝试创建一个指向外部 URL 的超链接,该 URL 是从数据库中检索的。
我试着这样做
<td><a href="{{dominio.url}}">{{dominio.url}}</a></td>
但我得到的路径是基本 URL 示例“localhost/web/www.tralalalala.com”中 URL 的相对路径,而不仅仅是“www.tralalalala.com”。
我该怎么做呢?
我正在使用 Symfony 2.0.19。我正在尝试创建一个指向外部 URL 的超链接,该 URL 是从数据库中检索的。
我试着这样做
<td><a href="{{dominio.url}}">{{dominio.url}}</a></td>
但我得到的路径是基本 URL 示例“localhost/web/www.tralalalala.com”中 URL 的相对路径,而不仅仅是“www.tralalalala.com”。
我该怎么做呢?
以下是Pierrickouw建议的具体示例:
在 下创建一个 Twig 扩展或过滤器src/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>
...
symfony 5 版本的 nbro 的答案将是:(这将处理从数据库中读取的所有类型的 url)
来源: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>