Symfony 如何在细枝函数中使用绝对路径
我有一个Symfony2(2.2)的应用程序。当我想发送邮件时,我遇到了路径问题,这些路径都是相对路径,显然在电子邮件中不起作用 用于渲染我正在使用的路径:Symfony 如何在细枝函数中使用绝对路径,symfony,routing,twig,Symfony,Routing,Twig,我有一个Symfony2(2.2)的应用程序。当我想发送邮件时,我遇到了路径问题,这些路径都是相对路径,显然在电子邮件中不起作用 用于渲染我正在使用的路径: <a href="{{ path('route_name', {'param' : value}) }}">A link</a> 对于资产: <img src="{{ asset('bundle/myname/img/image.gif') }}" alt="Title"/> <img sr
<a href="{{ path('route_name', {'param' : value}) }}">A link</a>
对于资产:
<img src="{{ asset('bundle/myname/img/image.gif') }}" alt="Title"/>
<img src="{{ absolute_url(asset('bundle/myname/img/image.gif')) }}" alt="Title"/>
前面的示例工作正常,但路径是相对的,因此我需要附加域。我可以这样做:
<a href="http://domain.com{{ path('route_name', {'param' => param1}) }}">A link</a>
但这并不是解决我问题的最佳方案,因为我有不同的领域
更新
我找到了带有
url
功能的路径解决方案,但我仍然需要一个资产解决方案。用于Symfony 2.7及更新版本
请看这里的答案
第一个工作选项
{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemo/images/search.png') }}
第二个工作选项-首选
刚刚用一个全新的Symfony副本做了一个快速测试。还有一种将scheme和httpHost相结合的方法:
{{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemo/images/search.png') }}
{# outputs #}
{# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css #}
您可能希望使用
资产\u基础\u URL
配置
framework:
templating:
assets_base_urls:
http: [http://www.website.com]
ssl: [https://www.website.com]
请注意,配置有所不同,因为: 有可能有和。那么硬编码url是个坏主意。 我建议:
{{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}}
以下是我的作品:
<img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />
来自:
Symfony 2.5中引入了资产的绝对URL
如果需要资产的绝对URL,可以将第三个参数(或绝对参数)设置为true:
例如:
<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
目前似乎工作正常,但请注意,现在不推荐使用twig的资产
功能生成绝对URL:
不推荐使用-使用Twig asset()函数生成绝对URL
已在2.7中弃用,将在3.0中删除。请使用
而不是绝对url()
以下是官方公告:
您必须使用绝对url
细枝功能:
{# Symfony 2.6 #}
{{ asset('logo.png', absolute = true) }}
{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}
{{ absolute_url(path('index')) }}
有趣的是,它还与path
函数一起工作:
{# Symfony 2.6 #}
{{ asset('logo.png', absolute = true) }}
{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}
{{ absolute_url(path('index')) }}
Symfony 2.7有一个新的绝对url,可用于生成绝对url。 这两种情况或路径字符串都适用:
<a href="{{ absolute_url(path('route_name', {'param' : value})) }}">A link</a>
我使用了文档中的以下建议来获取电子邮件中的绝对URL:
# config/services.yaml
parameters:
router.request_context.host: 'example.org'
router.request_context.scheme: 'https'
使用命令生成绝对URL的附加信息(例如发送电子邮件) 在命令中,
{{absolute_url(path('index'))}
不是现成的
您需要添加antongorodezkiy的答案中显示的附加配置
但如果您不想更改配置,因为您不确定它会如何影响整个应用程序,您可以在命令中配置路由器
这是文件:
代码如下:
use Symfony\Component\Routing\RouterInterface;
// ...
class DemoCommand extends Command
{
private $router;
public function __construct(RouterInterface $router)
{
parent::__construct();
$this->router = $router;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$context = $this->router->getContext();
$context->setHost('example.com');
$context->setScheme('https');
$context->setBaseUrl('my/path');
$url = $this->router->generate('route-name', ['param-name' => 'param-value']);
// ...
}
}
在细枝模板中生成URL的步骤
<a href="{{ absolute_url(path(...)) }}"></a>
只需在.env和.env.local文件中定义变量
NL_HOST=mydomain.com
NL_SCHEME=https
对于资产:这适用于图像我已经阅读了文档我找不到关于图像的任何信息您可以覆盖测试和开发环境的配置(config.yml,config_dev.yml,…),所以这不是问题。始终为我呈现http-即使在httpsy中,您也可以将其快捷方式设置为{app.request.getschemeandhphost~asset('images/foo.jpg')}啊,没有看到你的更新:d这个答案似乎有些过时。请参阅2015年9月24日Neto表单中的答案。是的,是关于新的发展:|我更新了URL,并注意到代码也发生了变化。我冒昧地更新了你的答案。请随意还原更改。@A.L感谢您的编辑,我没有意识到更改。这似乎是迄今为止最新的答案。Symfony 2.3.*有一个
url
Helper这是V3.0+Hi@Axel的最佳答案,这是预期的。CLI不知道您的域名是什么。不过,您可以配置您的请求上下文,以下是FYI absolute_url在4.3上的工作方式,这应该是可以接受的答案
$context = $this->router->getContext();
$context->setHost($_ENV['NL_HOST']);
$context->setScheme($_ENV['NL_SCHEME']);
NL_HOST=mydomain.com
NL_SCHEME=https