У меня есть приложение с Symfony2 (2.2). Когда я хочу отправить почту, у меня возникают проблемы с путями, которые являются относительными путями и, очевидно, не работают внутри писем.
для отображения путей, которые я использую:
<a href="{{ path('route_name', {'param' : value}) }}">A link</a>
и для активов:
<img src="{{ 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 и более новых
См. этот здесь.
1-я рабочая опция
{{ app.request.scheme ~'://' ~ app.request.httpHost ~ asset('bundles/acmedemo/images/search.png') }}
2-й рабочий вариант - предпочтительный
Просто сделал быстрый тест с чистой новой копией Symfony. Существует также еще один вариант, который объединяет схему и httpHost:
{{ app.request.getSchemeAndHttpHost() ~ asset('bundles/acmedemo/images/search.png') }}
{# outputs #}
{# http://localhost/Symfony/web/bundles/acmedemo/css/demo.css #}
Symfony 2.7 имеет новый absolute_url, который может использоваться для генерации абсолютного URL-адреса. http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes
Он будет работать в обоих случаях или в строке пути:
<a href="{{ absolute_url(path('route_name', {'param' : value})) }}">A link</a>
и для активов:
<img src="{{ absolute_url(asset('bundle/myname/img/image.gif')) }}" alt="Title"/>
Или для любого строкового пути
<img src="{{ absolute_url('my/absolute/path') }}" alt="Title"/>
в этих случаях дерева вы получите абсолютный URL, например
http://www.example.com/my/absolute/path
url
помощник по url
Из Документация Symfony2: Абсолютные URL-адреса для активов были представлены в Symfony 2.5.
Если вам нужны абсолютные URL-адреса для активов, вы можете установить третий аргумент (или абсолютный аргумент) в true:
Пример:
<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
Даниэль ответ, кажется, отлично работает, но учтите, что генерация абсолютных URL-адресов с использованием функции twig asset
теперь устарела:
DEPRECATED - создание абсолютных URL-адресов с помощью функции актива Twig() был устарел в 2.7 и будет удален в 3.0. Пожалуйста, используйте absolute_url().
Здесь официальное объявление: http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component#template-function-changes
Вы должны использовать функцию absolute_url
twig:
{# Symfony 2.6 #}
{{ asset('logo.png', absolute = true) }}
{# Symfony 2.7 #}
{{ absolute_url(asset('logo.png')) }}
Интересно отметить, что он также работает с функцией path
:
{{ absolute_url(path('index')) }}
{% stylesheets %}
?
Возможно, вы захотите использовать конфигурацию assets_base_urls
.
framework:
templating:
assets_base_urls:
http: [http://www.website.com]
ssl: [https://www.website.com]
http://symfony.com/doc/current/reference/configuration/framework.html#assets
Обратите внимание, что конфигурация отличается от Symfony 2.7:
framework:
# ...
assets:
base_urls:
- 'http://cdn.example.com/'
Для меня работает следующее:
<img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />
Возможно http://test_site.com и https://production_site.com. Тогда hardcoding url - плохая идея. Я бы предложил следующее:
{{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}}