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

45

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

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

Update

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

  • 1
    Для активов: symfony.com/doc/current/cookbook/assetic/…
  • 0
    эта работа для изображений, я перечитал документ, я ничего не могу найти об изображениях
Теги:
twig
routing

7 ответов

66
Лучший ответ

Для 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  #}
  • 4
    Вы можете сделать ярлык для этого {{app.request.getSchemeAndHttpHost ~ asset ('images / foo.jpg')}} ах не видели ваше обновление: D
  • 3
    Этот ответ кажется несколько устаревшим. См ответ от Нето форме 24 сентября 15.
80

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
  • 4
    Это, похоже, самый актуальный ответ на данный момент.
  • 0
    У Symfony 2.3. * url помощник по url
Показать ещё 3 комментария
47

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

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

Пример:

<img src="{{ asset('images/logo.png', absolute=true) }}" alt="Symfony!" />
  • 0
    да для новых разработок: |
  • 8
    Устаревший с версии 2.7, см. Stackoverflow.com/a/31524195/799309
20

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

Возможно, вы захотите использовать конфигурацию 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/'
  • 0
    Я обновил URL и заметил, что код тоже изменился. Я позволил себе обновить ваш ответ. Не стесняйтесь отменить изменения.
  • 0
    @ AL спасибо за редактирование, я не знал об изменениях.
3

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

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

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

{{app.request.scheme ~ '://' ~ app.request.host ~ asset('bundle/myname/img/image.gif')}}
  • 0
    Вы можете переопределить конфигурации для тестовой среды и среды разработки (config.yml, config_dev.yml, ...), так что это не проблема.
  • 0
    всегда делает для меня http - даже в https

Ещё вопросы

Сообщество Overcoder
Наверх
Меню