Как использовать абсолютный путь в функциях ветки
у меня есть приложение на 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
функция, но мне все еще нужно решение для активов.
8 ответов:
для 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
С документация Symfony2: Абсолютные URL-адреса для активов были введены в Symfony 2.5.
Если вам нужны абсолютные URL-адреса для активов, вы можете установить третий аргумент (или абсолютный аргумент) в true:
пример:
<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
Дэниел кажется, сейчас работает нормально, но обратите внимание, что генерация абсолютных URL-адресов с помощью twig's
вы, вероятно, хотите использовать
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/'
можно иметь http://test_site.com и https://production_site.com. тогда жесткое кодирование url-адреса-плохая идея. Я бы предложил следующее:
{{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}}
я использовал следующие советы из документов https://symfony.com/doc/current/console/request_context.html чтобы получить абсолютные URL-адреса в электронных письмах:
# config/services.yaml parameters: router.request_context.host: 'example.org' router.request_context.scheme: 'https'