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


у меня есть приложение на 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 52

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')}}

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

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

я использовал следующие советы из документов 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'