Подтвердить что ты не робот

Как использовать абсолютный путь в функциях веточки

У меня есть приложение с 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="#" onclick="location.href='http://domain.com{{ path('route_name', {'param' => param1}) }}'; return false;">A link</a>

но это не лучшее решение для моей проблемы, так как у меня разные области.

Update

Я нашел решение для путей с помощью функции url, но мне все еще нужно решение для активов.

4b9b3361

Ответ 1

Для 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  #}

Ответ 2

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

Ответ 3

Из Документация Symfony2: Абсолютные URL-адреса для активов были представлены в Symfony 2.5.

Если вам нужны абсолютные URL-адреса для активов, вы можете установить третий аргумент (или абсолютный аргумент) в true:

Пример:

<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />

Ответ 4

Даниэль ответ, кажется, отлично работает, но учтите, что генерация абсолютных 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')) }}

Ответ 5

Возможно, вы захотите использовать конфигурацию 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/'

Ответ 6

Возможно http://test_site.com и https://production_site.com. Тогда hardcoding url - плохая идея. Я бы предложил следующее:

{{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}}

Ответ 7

Для меня работает следующее:

<img src="{{ asset('bundle/myname/img/image.gif', null, true) }}" />